介绍
小编这次要给大家分享的是@Validated怎么验证集列表合,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
在开发时发现,@Validated只能验证单个实体类,在验证集列表合时则不生效
@PostMapping (value=https://www.yisu.com/zixun//测试) 公共ApiResult getRepaymentPlan (@RequestBody @Validated列表<测试> repaymentPlanVOs) { }
经过查资料得知,@valid是可以使用的,我们自定义一个ValidList类来替换名单就可以达到验证的目的,话不多说,直接看代码
公共类ValidList实现List { @Valid 私人List ,列表=new LinkedList<的在(); @Override 公共int大小(){ 返回list.size (); } @Override 公共布尔isEmpty () { 返回list.isEmpty (); } @Override 公共逻辑包含(对象o) { 返回list.contains (o); } @Override 公共Iterator iterator () { 返回list.iterator (); } @Override 公共对象[]toArray () { 返回list.toArray (); } @Override 公共& lt; T>T [] toArray (T []) { 返回list.toArray(一个); } @Override 公共逻辑加(E E) { 返回list.add (e); } @Override 公共逻辑删除对象(o) { 返回list.remove (o); } @Override 公共布尔containsAll (Collection<及# 63;在c) { 返回list.containsAll (c); } @Override 公共布尔addAll (Collection<及# 63;E>延伸;c) { 返回list.addAll (c); } @Override 公共布尔addAll (int指数,Collection<及# 63;E>延伸;c) { 返回列表。addAll(指数(c); } @Override 公共布尔removeAll (Collection<及# 63;在c) { 返回list.removeAll (c); } @Override 公共布尔retainAll (Collection<及# 63;在c) { 返回list.retainAll (c); } @Override 公共空间clear () { list.clear (); } @Override 公共E (int指数){ 返回list.get(指数); } @Override 公共E组(int指数E元素){ 返回列表。集(指数、元素); } @Override 公共空间添加(int指数E元素){ 列表。添加(指数(元素); } @Override 公共E删除(int指数){ 返回list.remove(指数); } @Override 公共int indexOf(对象o) { 返回list.indexOf (o); } @Override 公共int lastIndexOf(对象o) { 返回list.lastIndexOf (o); } @Override 公共ListIterator listIterator () { 返回list.listIterator (); } @Override 公共ListIterator listIterator (int指数){ 返回list.listIterator(指数); } @Override 公共List 分表(int fromIndex int toIndex) { 返回列表。分表(fromIndex toIndex); } 公共List getList () { 返回列表; } 公共演唱会的曲目(List 列表){ 这一点。列表=; } }
然后用ValidList类替换我们的名单即可
@PostMapping (value=https://www.yisu.com/zixun//测试) 公共ApiResult getRepaymentPlan (@RequestBody @Validated ValidList <测试> repaymentPlanVOs) { }
补充,将@Validated返回的异常替换为我们自定义的json格式并返回,只需在当前控制器类里注入一个异常bean,并用@ExceptionHandler来捕获对应的异常即可.MethodArgumentNotValidException为@Validated返回的异常,这里只需要捕获对应异常即可
@ExceptionHandler (value=https://www.yisu.com/zixun/MethodArgumentNotValidException.class) @ResponseBody 公共地图<字符串、对象> allExceptionHandler (MethodArgumentNotValidException e) { Map=新HashMap <字符串、对象> (); MethodArgumentNotValidException前任=(MethodArgumentNotValidException); BindingResult BindingResult=ex.getBindingResult (); .size StringBuilder errMsg=new StringBuilder (bindingResult.getFieldErrors () () * 16); errMsg。追加(“无效的请求:”); for (int i=0;我 0){ errMsg.append (", "); } FieldError错误=bindingResult.getFieldErrors () . get(我); errMsg.append (error.getField () +“:”+ error.getDefaultMessage ()); } result.put (“res_code”、“400”); result.put (“res_mess errMsg.toString ()); 返回结果; } @Validated怎么验证列表集合