可以有两种使用方法:

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

  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进行校验,然后根据校验结果做响应的处理。封装好的一个工具类如下。

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

具体实现可以参考这个例子

Hibernate-validator校验框架使用的更多相关文章

  1. springboot使用hibernate validator校验,Bean Validation校验

    第一个地址:springboot使用hibernate validator校验,Bean Validation校验

  2. springboot使用hibernate validator校验

    一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长 每次要 ...

  3. springboot使用hibernate validator校验方式

    一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长 每次要 ...

  4. Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty  用在集合类上面 @NotBlank   用在String上 ...

  5. spring MVC 使用 hibernate validator验证框架,国际化配置

    spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...

  6. Hibernate Validator校验参数全攻略

    1. 前言 数据字段一般都要遵循业务要求和数据库设计,所以后端的参数校验是必须的,应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的. 2. 数据校验的痛点 为了保证数据语义的正确,我们 ...

  7. spring boot中使用javax.validation以及org.hibernate.validator校验入参

    这里springboot用的版本是:<version>2.1.1.RELEASE</version> 自带了hibernate.validator,所以不用添加额外依赖 1.创 ...

  8. Java笔记 #07# Hibernate Validator

    Hibernate Validator是Spring Boot默认附带的标准校验API(javax.validation)实现. 应用实例(配合切面) 采用注解定义切面.java @Aspect @C ...

  9. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  10. hibernate.validator 与 jackson

    1.使用hibernate.validator校验非空,在FormData类中 name字段上面加@NotEmpty @NotEmpty(message = "姓名必填") pri ...

随机推荐

  1. Mysql替换两个字段的内容(字符串)

    问题:用一条sql来替换两个字段的内容 表内容:  待优化sql: update student set name=CONCAT(name,dname),dname=SUBSTR(name FROM ...

  2. Http升级到Https (本地测试,无须域名和认证)

    在之前的语音识别的项目中,一切都在本地进行得很顺利,然后把写的Demo部署到服务器上给老大看的时候,通过IP访问(http://192.168.145.170:8080这样的形式)时,从一开始就坏掉了 ...

  3. HDU6197

    array array array Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  4. nodejs 新建项目

    第一步: 新建工程-->选择nodejs-->creat 注意: 如果出错就使用第二步!! 第二步:建立express 模板的nodejs 点击下图的命令窗口,依次输入下面命令 命令: & ...

  5. 【代码笔记】iOS-对数组进行排序

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...

  6. CentOS7查看开放端口命令及开放端口号

    CentOS 7查看以开放端口命令:firewall-cmd —list-ports 查看端口是否开放命令:第一个方法就是使用lsof -i:端口号命令行,例如lsof -i:80.如果没有任何信息输 ...

  7. JavaSE——TCP协议网络编程(一)

    实现客户端与服务端的连接: 创建TCP服务端的 ServerSocket ServerSocket :此类实现服务器套接字.服务器套接字请求通过网络传入,基于该请求执行某些操作,然后可能向请求者返回结 ...

  8. TNS-12549问题分析及解决办法

    该服务器启动监听时候报错因为最后一句是Linux Error:No space left on device 因为是LINUX Error,所以可以到/var/log/messages里查看具体报错信 ...

  9. Android--activity切换时的动画

    1.首先先创建四个动画文件 ①:left_in.xml <?xml version="1.0" encoding="utf-8"?> <set ...

  10. 基于docker搭建jumpserver堡垒机

    一.环境信息 1.jumpserver 192.168.137.129 CentOS6.4   kernel版本为 3.10.5-3.el6.x86_64 2.客户机 dev01-04 3.docke ...