1

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 ?

Community
  • 1
  • 1
Pleymor
  • 2,611
  • 1
  • 32
  • 44

1 Answers1

1

The solution was to remove @RequestParam, thanks Sotirios Delimanolis !

Pleymor
  • 2,611
  • 1
  • 32
  • 44