bindingResult
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                bindingResult
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            1. 起因:?
??? 半路接手的項目,原使用spring 3.1.0.CI-995(不知道當時怎么設計的,使用了這么一個過渡版本),但是現在想用注解來驗證數據的有效性,正常情況下,使用@Valid驗證也沒有什么問題,但是現在有一個需求就是接收json后,驗證對象的數據有效性,這時后臺出錯。?
 
2. 解決方法?
??? spring 3.1.0.CI-995 升級到 3.1.0.RELEASE。版本升級過程中也不是很順利,調了很長時間才通過,過渡版本到正式版也有很多差異的地方。?
 
2. 普通驗證?
JavaBean?
Java代碼?? public?class?Message{??  ??  ????@NotEmpty(message?=?"Message?name?must?not?be?blank!")??  ????private?String?name;??  ??  ????@NotBlank(message?=?"Message?description?must?not?be?blank!")??  ????private?String?description;??  ??  ????public?Message()?{??  ????}??  ??  ????public?Message(String?name,?String?description)?{??  ????????this.name?=?name;??  ????????this.description?=?description;??  ????}??  ??  ????public?String?getName()?{??  ????????return?name;??  ????}??  ??  ????public?void?setName(String?name)?{??  ????????this.name?=?name;??  ????}??  ??  ????public?String?getDescription()?{??  ????????return?description;??  ????}??  ??  ????public?void?setDescription(String?description)?{??  ????????this.description?=?description;??  ????}??  ??  }??  
 
 
Controller?
Java代碼?? @RequestMapping("/sender/message")??  ????@ResponseBody??  ????public?ResponseBean?sendMessage(@Valid?Message?messageBean,?BindingResult?bindingResult){??  ??  ????????......??  ??  ????????if?(bindingResult.hasErrors())?{??  ????????????System.out.println("驗證失敗!");??  ????????}??  ????????......??  }??  
 
注意:BindingResult 對象必須在 @Valid 的緊挨著的后面,否則接收不到錯誤信息。 ?
 
3. 接收json的驗證?
Controller?
方法1:?
Java代碼?? @RequestMapping("/sender/message")??  ????@ResponseBody??  ????public?ResponseBean?sendMessage(@Valid?@RequestBody?Message?messageBean,?BindingResult?bindingResult){??  ????????......??  ??  ????????if?(bindingResult.hasErrors())?{??  ????????????System.out.println("驗證失敗!");??  ????????}??  ????????......??  }??  
 
上面這種方式在spring3.2.x中沒有試過,在3.1.0.RELEASE中是出錯的。如果上面這種出錯,可以使用下面方法。?
 
方法2:?
Java代碼?? @RequestMapping("/sender/message")??  ????@ResponseBody??  ????public?ResponseBean?sendMessage(@Valid?@RequestBody?Message?messageBean){??  ????????......??  ??  ????????......??  }??  
 
在此Controller中添加如下方法:?
 
使用@ExceptionHandler捕獲錯誤信息:?
Java代碼?? //?valid?exception??  @ExceptionHandler(MethodArgumentNotValidException.class)??  @ResponseBody??  public?ResponseBean?handleMethodArgumentNotValidException(??  ????????MethodArgumentNotValidException?ex)?{??  ????BindingResult?bindingResult?=?ex.getBindingResult();??  ????String?errorMesssage?=?"Invalid?Request:";??  ??  ????for?(FieldError?fieldError?:?bindingResult.getFieldErrors())?{??  ????????errorMesssage?+=?fieldError.getDefaultMessage()?+?",?";??  ????}??  ??????  ????System.out.println(bindingResult.getFieldError().getDefaultMessage());??  ????ResponseBean?response?=?new?ResponseBean();??  ????response.setErrcode("-11");??  ????response.setErrmsg(errorMesssage);??  ????return?response;??  }??  ??  //?JSON?convert?exception??  @ExceptionHandler(HttpMessageNotReadableException.class)??  @ResponseBody??  public?ResponseBean?handleHttpMessageNotReadableException(??  ????????HttpMessageNotReadableException?ex)?{??  ????ResponseBean?response?=?new?ResponseBean();??  ????response.setErrcode("-22");??  ????response.setErrmsg("json?convert?failure!");??  ????return?response;??  }??  
 
注意:MethodArgumentNotValidException 類,在spring 3.1.0.RELEASE 版本之后才有。 ?
 
轉載請注明: http://langmnm.iteye.com/blog/2078439
                        
                        
                        ??? 半路接手的項目,原使用spring 3.1.0.CI-995(不知道當時怎么設計的,使用了這么一個過渡版本),但是現在想用注解來驗證數據的有效性,正常情況下,使用@Valid驗證也沒有什么問題,但是現在有一個需求就是接收json后,驗證對象的數據有效性,這時后臺出錯。?
2. 解決方法?
??? spring 3.1.0.CI-995 升級到 3.1.0.RELEASE。版本升級過程中也不是很順利,調了很長時間才通過,過渡版本到正式版也有很多差異的地方。?
2. 普通驗證?
JavaBean?
Java代碼??
Controller?
Java代碼??
注意:BindingResult 對象必須在 @Valid 的緊挨著的后面,否則接收不到錯誤信息。 ?
3. 接收json的驗證?
Controller?
方法1:?
Java代碼??
上面這種方式在spring3.2.x中沒有試過,在3.1.0.RELEASE中是出錯的。如果上面這種出錯,可以使用下面方法。?
方法2:?
Java代碼??
在此Controller中添加如下方法:?
使用@ExceptionHandler捕獲錯誤信息:?
Java代碼??
注意:MethodArgumentNotValidException 類,在spring 3.1.0.RELEASE 版本之后才有。 ?
轉載請注明: http://langmnm.iteye.com/blog/2078439
總結
以上是生活随笔為你收集整理的bindingResult的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 北京内推 | Hulu机器学习应用平台团
- 下一篇: AD组策略管理
