/** * Return whether the parameter is declared with the given annotation type. * @param annotationType the annotation type to look for * @see #getParameterAnnotation(Class) */ public <A extends Annotation> boolean hasParameterAnnotation(Class<A> annotationType) { return (getParameterAnnotation(annotationType) != null); }
@Override public boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { return (AbstractJackson2HttpMessageConverter.class.isAssignableFrom(converterType) && methodParameter.getParameterAnnotation(JsonView.class) != null); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { PathVariable ann = parameter.getParameterAnnotation(PathVariable.class); Assert.state(ann != null, "No PathVariable annotation"); return new PathVariableNamedValueInfo(ann); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { Header annotation = parameter.getParameterAnnotation(Header.class); Assert.state(annotation != null, "No Header annotation"); return new HeaderNamedValueInfo(annotation); }
@Override public boolean supportsParameter(MethodParameter parameter) { RequestParam requestParam = parameter.getParameterAnnotation(RequestParam.class); return (requestParam != null && Map.class.isAssignableFrom(parameter.getParameterType()) && !StringUtils.hasText(requestParam.name())); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { RequestHeader ann = parameter.getParameterAnnotation(RequestHeader.class); Assert.state(ann != null, "No RequestHeader annotation"); return new RequestHeaderNamedValueInfo(ann); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { MatrixVariable ann = parameter.getParameterAnnotation(MatrixVariable.class); Assert.state(ann != null, "No MatrixVariable annotation"); return new MatrixVariableNamedValueInfo(ann); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { RequestHeader ann = parameter.getParameterAnnotation(RequestHeader.class); Assert.state(ann != null, "No RequestHeader annotation"); return new RequestHeaderNamedValueInfo(ann); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { Value ann = parameter.getParameterAnnotation(Value.class); Assert.state(ann != null, "No Value annotation"); return new ExpressionValueNamedValueInfo(ann); }
@Override public Mono<Object> resolveArgument( MethodParameter param, BindingContext bindingContext, ServerWebExchange exchange) { RequestBody ann = param.getParameterAnnotation(RequestBody.class); Assert.state(ann != null, "No RequestBody annotation"); return readBody(param, ann.required(), bindingContext, exchange); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { RequestParam ann = parameter.getParameterAnnotation(RequestParam.class); return (ann != null ? new RequestParamNamedValueInfo(ann) : new RequestParamNamedValueInfo()); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { RequestAttribute ann = parameter.getParameterAnnotation(RequestAttribute.class); Assert.state(ann != null, "No RequestAttribute annotation"); return new NamedValueInfo(ann.name(), ann.required(), ValueConstants.DEFAULT_NONE); }
@Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { RequestAttribute ann = parameter.getParameterAnnotation(RequestAttribute.class); Assert.state(ann != null, "No RequestAttribute annotation"); return new NamedValueInfo(ann.name(), ann.required(), ValueConstants.DEFAULT_NONE); }
@Override public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> selectedConverterType) throws IOException { JsonView ann = methodParameter.getParameterAnnotation(JsonView.class); Assert.state(ann != null, "No JsonView annotation"); Class<?>[] classes = ann.value(); if (classes.length != 1) { throw new IllegalArgumentException( "@JsonView only supported for request body advice with exactly 1 class argument: " + methodParameter); } return new MappingJacksonInputMessage(inputMessage.getBody(), inputMessage.getHeaders(), classes[0]); }
@Override public boolean test(MethodParameter parameter) { RequestBody annotation = parameter.getParameterAnnotation(RequestBody.class); return annotation != null && annotation.required() == this.required; } }
@Override public void contributeMethodArgument(MethodParameter parameter, Object value, UriComponentsBuilder builder, Map<String, Object> uriVariables, ConversionService conversionService) { if (Map.class.isAssignableFrom(parameter.nestedIfOptional().getNestedParameterType())) { return; } PathVariable ann = parameter.getParameterAnnotation(PathVariable.class); String name = (ann != null && !StringUtils.isEmpty(ann.value()) ? ann.value() : parameter.getParameterName()); String formatted = formatUriValue(conversionService, new TypeDescriptor(parameter.nestedIfOptional()), value); uriVariables.put(name, formatted); }
@Override public boolean test(MethodParameter parameter) { MatrixVariable annotation = parameter.getParameterAnnotation(MatrixVariable.class); return annotation != null && (this.name == null || this.name.equalsIgnoreCase(annotation.name())) && (this.pathVar == null || this.pathVar.equalsIgnoreCase(annotation.pathVar())); } }
@Override public boolean test(MethodParameter parameter) { ModelAttribute annotation = parameter.getParameterAnnotation(ModelAttribute.class); return annotation != null && (this.name == null || annotation.name().equals(this.name)) && annotation.binding() == this.binding; } }
@Override public boolean test(MethodParameter parameter) { RequestParam annotation = parameter.getParameterAnnotation(RequestParam.class); return annotation != null && (this.name == null || annotation.name().equals(this.name)) && annotation.required() == this.required && annotation.defaultValue().equals(this.defaultValue); } }
@Test public void annotatedConstructorParameterInStaticNestedClass() throws Exception { Constructor<?> constructor = NestedClass.class.getDeclaredConstructor(String.class); MethodParameter methodParameter = MethodParameter.forExecutable(constructor, 0); assertEquals(String.class, methodParameter.getParameterType()); assertNotNull("Failed to find @Param annotation", methodParameter.getParameterAnnotation(Param.class)); }