博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate-validator校验框架使用
阅读量:4593 次
发布时间:2019-06-09

本文共 1967 字,大约阅读时间需要 6 分钟。

可以有两种使用方法:

第一种:在要检验的Dto对象之前加@Valid注解,这种方法必须配合BindingResult参数一起使用,否则验证不通过就会返回400,并且抛出"org.springframework.validation.BindException"异常,举例如下。这种交互不利于前端获取校验信息,因此需要配合BindingResult对校验结果进行封装之后再返回给前端。

[java] 
 
 
  1. {  
  2.   "timestamp": 1489024472175,  
  3.   "status": 400,  
  4.   "error": "Bad Request",  
  5.   "exception": "org.springframework.validation.BindException",  
  6.   "errors": [  
  7.     {  
  8.       "codes": [  
  9.         "Range.userDto.age",  
  10.         "Range.age",  
  11.         "Range.int",  
  12.         "Range"  
  13.       ],  
  14.       "arguments": [  
  15.         {  
  16.           "codes": [  
  17.             "userDto.age",  
  18.             "age"  
  19.           ],  
  20.           "arguments": null,  
  21.           "defaultMessage": "age",  
  22.           "code": "age"  
  23.         },  
  24.         150,  
  25.         1  
  26.       ],  
  27.       "defaultMessage": "年龄必须介于1到150之间",  
  28.       "objectName": "userDto",  
  29.       "field": "age",  
  30.       "rejectedValue": 152,  
  31.       "bindingFailure": false,  
  32.       "code": "Range"  
  33.     }  
  34.   ],  
  35.   "message": "Validation failed for object='userDto'. Error count: 1",  
  36.   "path": "/test/login2"  
  37. }  

第二种:将validation逻辑封装成工具类,使用工具类对dto进行校验,然后根据校验结果做响应的处理。封装好的一个工具类如下。

 

[java] 
 
 
  1. public class ValidationUtils {  
  2.   
  3.     private static Validator validator =  Validation.buildDefaultValidatorFactory().getValidator();  
  4.       
  5.     public static <T> ValidationResult validateEntity(T obj){  
  6.         ValidationResult result = new ValidationResult();  
  7.          Set<ConstraintViolation<T>> set = validator.validate(obj,Default.class);  
  8.          if( CollectionUtils.isNotEmpty(set) ){  
  9.              result.setHasErrors(true);  
  10.              Map<String,String> errorMsg = new HashMap<String,String>();  
  11.              for(ConstraintViolation<T> cv : set){  
  12.                  errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());  
  13.              }  
  14.              result.setErrorMsg(errorMsg);  
  15.          }  
  16.          return result;  
  17.     }  
  18.       
  19.     public static <T> ValidationResult validateProperty(T obj,String propertyName){  
  20.         ValidationResult result = new ValidationResult();  
  21.          Set<ConstraintViolation<T>> set = validator.validateProperty(obj,propertyName,Default.class);  
  22.          if( CollectionUtils.isNotEmpty(set) ){  
  23.              result.setHasErrors(true);  
  24.              Map<String,String> errorMsg = new HashMap<String,String>();  
  25.              for(ConstraintViolation<T> cv : set){  
  26.                  errorMsg.put(propertyName, cv.getMessage());  
  27.              }  
  28.              result.setErrorMsg(errorMsg);  
  29.          }  
  30.          return result;  
  31.     }  
  32. }  

转载于:https://www.cnblogs.com/exmyth/p/8661913.html

你可能感兴趣的文章
团队简介
查看>>
Oracle总结二
查看>>
Flask—03-bootstrap与表单
查看>>
五人分鱼问题
查看>>
Objective-C 锁
查看>>
Django-urls(路由系统)
查看>>
jsp c:forEach用法
查看>>
Derek解读Bytom源码-P2P网络 地址簿
查看>>
mac Vue基础
查看>>
诺基亚920内置地图PK苹果5地图
查看>>
Huffman编码
查看>>
.NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务
查看>>
iOS - CocoaPods使用傻瓜简版
查看>>
Jenkins-Restrict where the project can be run
查看>>
TabController定义顶部tab切换
查看>>
JAVA会员生日和密码
查看>>
ubuntu增加工作分区命令
查看>>
oracle coherence介绍及使用
查看>>
windows批处理 (cmd/bat) 编程详解
查看>>
关于正则表达式结果不一致
查看>>