2015-04-17 31 views
2

我想验证请求参数,它只是一个字符串值。网上的大多数例子都是关于使用自定义验证器来验证域对象的。但是我想为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"; 

    } 
} 

我想用Validator接口,已经可以在春天,而不是AOP或者任何IF条件

+0

您可以使用AOP并拦截方法调用,验证参数,如果无效,请手动修改绑定结果或抛出异常并在控制器中处理它。 – ecyshor

+0

我不认为我需要AOP在这里。我想要使​​用已经在Spring – sidgate

+0

中可用的Validator接口如何通过String创建包装器对象,并添加JSR 303注释以进行验证,或者为相应的对象创建验证器? – ecyshor

回答

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您的控制器的注释方法。

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"); 
     } 
+0

您能详细解释一下您提供的解决方案吗? – abarisone

相关问题