在控制器之前验证请求参数

时间:2015-04-17 09:09:32

标签: java spring validation spring-mvc

我想验证请求参数,它只是一个字符串值。网上的大多数示例都讨论了使用自定义验证器验证域对象。但我想为String值编写一个验证器。如何实现?

@Controller
@RequestMapping("/base")
class MyController{

   //value needs to be validated.
   @RequestMapping("/sub")
   public String someMethod(@RequestParam String value, BindingResult result){
       if(result.hasErrors()){
          return "error";
       }

       //do operation
       return "view";

   }
}

我想使用Spring中已有的Validator接口,而不是AOP或任何IF条件

2 个答案:

答案 0 :(得分:1)

您的控制器无法验证参数,因为BindingResult应遵循ModelAttribute,而不是RequestParam

因此,如果您想使用Spring MVC自动验证,您应该使用包含字符串的类作为ModelAttribute:

class MyController {
   @RequestMapping("/sub")
   public String someMethod(@ModelAttribute Params params, BindingResult result){
       if(result.hasErrors()){
          return "error";
       }

       //do operation with params.value
       return "view";

   }

    public static class Params {
        // add eventual JSR-303 annotations here
        String value;

       // getter and setter ommited for brievety
    }

}

当然,这假设您将验证器放入WebBinder,例如通过控制器的@InitBinder注释方法。

答案 1 :(得分:0)

   //value needs to be validated.
   @RequestMapping("/sub")
   public String someMethod(@RequestParam String value, BindingResult result) throws SomeException {

        if (!ValidationUtils.isValid(value)) {
            throw new SomeException("Some text");
        }