bindingResult

来源:互联网 发布:网络媒介素养 名词解释 编辑:程序博客网 时间:2024/06/16 11:07
1. 起因: 
    半路接手的项目,原使用spring 3.1.0.CI-995(不知道当时怎么设计的,使用了这么一个过渡版本),但是现在想用注解来验证数据的有效性,正常情况下,使用@Valid验证也没有什么问题,但是现在有一个需求就是接收json后,验证对象的数据有效性,这时后台出错。 

2. 解决方法 
    spring 3.1.0.CI-995 升级到 3.1.0.RELEASE。版本升级过程中也不是很顺利,调了很长时间才通过,过渡版本到正式版也有很多差异的地方。 

2. 普通验证 
JavaBean 
Java代码  收藏代码
  1. public class Message{  
  2.   
  3.     @NotEmpty(message = "Message name must not be blank!")  
  4.     private String name;  
  5.   
  6.     @NotBlank(message = "Message description must not be blank!")  
  7.     private String description;  
  8.   
  9.     public Message() {  
  10.     }  
  11.   
  12.     public Message(String name, String description) {  
  13.         this.name = name;  
  14.         this.description = description;  
  15.     }  
  16.   
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.   
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.   
  25.     public String getDescription() {  
  26.         return description;  
  27.     }  
  28.   
  29.     public void setDescription(String description) {  
  30.         this.description = description;  
  31.     }  
  32.   
  33. }  


Controller 
Java代码  收藏代码
  1. @RequestMapping("/sender/message")  
  2.     @ResponseBody  
  3.     public ResponseBean sendMessage(@Valid Message messageBean, BindingResult bindingResult){  
  4.   
  5.         ......  
  6.   
  7.         if (bindingResult.hasErrors()) {  
  8.             System.out.println("验证失败!");  
  9.         }  
  10.         ......  
  11. }  

注意:BindingResult 对象必须在 @Valid 的紧挨着的后面,否则接收不到错误信息。 

3. 接收json的验证 
Controller 
方法1: 
Java代码  收藏代码
  1. @RequestMapping("/sender/message")  
  2.     @ResponseBody  
  3.     public ResponseBean sendMessage(@Valid @RequestBody Message messageBean, BindingResult bindingResult){  
  4.         ......  
  5.   
  6.         if (bindingResult.hasErrors()) {  
  7.             System.out.println("验证失败!");  
  8.         }  
  9.         ......  
  10. }  

上面这种方式在spring3.2.x中没有试过,在3.1.0.RELEASE中是出错的。如果上面这种出错,可以使用下面方法。 

方法2: 
Java代码  收藏代码
  1. @RequestMapping("/sender/message")  
  2.     @ResponseBody  
  3.     public ResponseBean sendMessage(@Valid @RequestBody Message messageBean){  
  4.         ......  
  5.   
  6.         ......  
  7. }  

在此Controller中添加如下方法: 

使用@ExceptionHandler捕获错误信息: 
Java代码  收藏代码
  1. // valid exception  
  2. @ExceptionHandler(MethodArgumentNotValidException.class)  
  3. @ResponseBody  
  4. public ResponseBean handleMethodArgumentNotValidException(  
  5.         MethodArgumentNotValidException ex) {  
  6.     BindingResult bindingResult = ex.getBindingResult();  
  7.     String errorMesssage = "Invalid Request:";  
  8.   
  9.     for (FieldError fieldError : bindingResult.getFieldErrors()) {  
  10.         errorMesssage += fieldError.getDefaultMessage() + ", ";  
  11.     }  
  12.       
  13.     System.out.println(bindingResult.getFieldError().getDefaultMessage());  
  14.     ResponseBean response = new ResponseBean();  
  15.     response.setErrcode("-11");  
  16.     response.setErrmsg(errorMesssage);  
  17.     return response;  
  18. }  
  19.   
  20. // JSON convert exception  
  21. @ExceptionHandler(HttpMessageNotReadableException.class)  
  22. @ResponseBody  
  23. public ResponseBean handleHttpMessageNotReadableException(  
  24.         HttpMessageNotReadableException ex) {  
  25.     ResponseBean response = new ResponseBean();  
  26.     response.setErrcode("-22");  
  27.     response.setErrmsg("json convert failure!");  
  28.     return response;  
  29. }  

注意:MethodArgumentNotValidException 类,在spring 3.1.0.RELEASE 版本之后才有。 

转载请注明:http://langmnm.iteye.com/blog/2078439
0 0
原创粉丝点击