【发布时间】:2017-01-03 06:34:12
【问题描述】:
进入控制器前如何修改请求参数(@RequestParam String bar)?
理想情况下,我想创建一个注释:
@RequestMapping(method = GET, path = "foo")
public ResponseEntity<String> getBar(@RequestParam @Sanitize("bar") String bar) {
// bar is sanitized
/** method body *//
}
根据to this question,我尝试创建接口Sanitize:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Sanitize {
String value();
}
还有一个解析器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()));
}
}
并将解析器添加到我的WebMvcConfigurerAdapter 的解析器中:
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new SanitizeResolver());
}
解析器添加得很好,但从未调用过。
我正在使用Spring 4.2.6.RELEASE。 我错过了什么,如果不能工作,有没有更好的解决方案?
【问题讨论】:
-
目前,
@RequestParam的解析器正在在您的自定义解析器之前被选中。 -
感谢您的回答。所以目前没有办法实现我猜的?
-
摆脱
@RequestParam。
标签: java spring validation spring-mvc