可以有两种使用方法:

第一种:在要检验的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. Java基础——collection接口

    一.Collection接口的定义 public interfaceCollection<E>extends iterable<E>  从接口的定义中可以发现,此接口使用了泛型 ...

  2. mysql匿名登录 导致创建不了数据库

    常见问题 Access denied for user ''@'localhost' to database 'web02' //web02是我自己创建的数据库 原因分析:mysql数据库的user表 ...

  3. Points on Cycle (hdu1700,几何)

    Points on Cycle Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. Jquery 只保留数字和小数点(正则)

    str.replace(/[^\d.]/g,"")

  5. 使用Picasso将加载的图片变成圆形

    http://blog.it985.com/14794.html,感谢该作者 Picasso的GITHUB地址:https://github.com/square/picasso. 怎么实现各种各样的 ...

  6. [Objective-C] id类型和instancetype类型

    前些时间在源码里看到instancetype返回类型,一脸惊异,表示接触iOS不久没见过这东西,但发现跟id功能差不多.故查了一些资料,了解了两者之间的区别,故将资料简单翻译整理了一下,为博客充一个数 ...

  7. 对WebSocket技术的学习与探索(二)

    近日重新开始学习WebSocket技术,什么是WebSocket,在<对WebSocket技术的学习与探索(一)>文章中已经说明白了,还没理解可以看看这篇文章http://www.ruan ...

  8. qtcreator minggw 支持c++11

    pro文件添加 QMAKE_CXXFLAGS += -std=c++11

  9. 《ECMAScript6标准入门》第三版--读书笔记

    2015年6月,ECMAScript 6正式通过,成为国际标准.尽管在目前的工作中还没有使用ES6,但是每项新技术出来总是忍不住想尝尝鲜,想知道ES6能为前端开发带来哪些变化?对自己的工作有哪些方面可 ...

  10. Hibernate 二级缓存配置

    详见:https://www.cnblogs.com/Junsept/p/7324981.html Hibernate的cache管理: Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起 ...