【问题标题】:Annotation to modify a request parameter修改请求参数的注解
【发布时间】: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


【解决方案1】:

解决方案是删除 @RequestParam,感谢 Sotirios Delimanolis!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2015-08-23
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2021-07-23
    相关资源
    最近更新 更多