Reputation: 2921
How to modify a request parameter (@RequestParam String bar
) before entering in the controller ?
Ideally I'd like to create an annotation :
@RequestMapping(method = GET, path = "foo")
public ResponseEntity<String> getBar(@RequestParam @Sanitize("bar") String bar) {
// bar is sanitized
/** method body *//
}
According to this question, I tried to create the interface Sanitize
:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Sanitize {
String value();
}
And a resolver SanitizeResolver
public class SanitizeResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(Sanitize.class) != null;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
Sanitize attr = parameter.getParameterAnnotation(Sanitize.class);
return MyUtils.sanitize(webRequest.getParameter(attr.value()));
}
}
And to add the resolver to my WebMvcConfigurerAdapter
's resolver:
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new SanitizeResolver());
}
The resolver is well added but never called.
I'm using Spring 4.2.6.RELEASE. Do I miss something, and if can't work, is there a better solution ?
Upvotes: 1
Views: 3021
Reputation: 2921
The solution was to remove @RequestParam
, thanks Sotirios Delimanolis !
Upvotes: 1