可以有两种使用方法:

第一种:在要检验的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. Quoit Design(hdu1007)最近点对问题。模版哦!

    Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. Java-函数式编程(一)初识篇

    开发者使用Java8编写复杂的集合处理算法,只需要简单的代码就能在多喝cpu上高效运行,这就是Lambda表达式的初衷. 提示:函数式编程和语言无关,它是一种思想,任何语言都可以实现函数式编程,区别只 ...

  3. 漫画 | Spring AOP

    上期,我们看到有小伙伴留言说希望讲讲AOP 然后...... 别激动,来得及 什么是AOP AOP是Spring 框架的一个关键组件,全称为Aspect-OrientedProgramming(面向切 ...

  4. hadoop_批量命令脚本&同步文件脚本

    1.xcall.sh 批量命令脚本,例:xcall.sh jps ,查看hadoop101~ hadoop104的jps进程 注意:在执行命令的时候,若是提示没有这个命令,但是在本机又可以执行,记得在 ...

  5. 华中农业大学第五届程序设计大赛网络同步赛-K

    K.Deadline There are N bugs to be repaired and some engineers whose abilities are roughly equal. And ...

  6. Mysql数据库 的库表简易操作

    一. 库的操作 1.创建数据库 创建数据库: create database 库名 charset utf8;   charset uft8  可选项 1.2 数据库命名规范: 可以由字母.数字.下划 ...

  7. 微信公众号本地断点调试(frp反向代理或Remote Debugger)

    问题描述: 需要开发微信授权和订阅推送,但是感觉调试不方便,就试着几种方式.因为是用的C#开发,Visual Studio工具自带配套的远程工具 (Remote Debugger).但是感觉不稳定,容 ...

  8. 【代码笔记】iOS-产生随机字符串

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

  9. jQuery中hover方法和toggle方法使用指南

    jQuery提供一些方法(如:toggle)将两种事件效果合并到一起,比如:mouseover.mouseout:keyup.keydown等 1.hover函数 hover(over,out)一个模 ...

  10. H5音乐播放器【歌单列表】

    上篇详细描述了播放页歌词如何实现跟随跟单滚动,如何解析歌词,那么歌单页又是如何生成的呢,话不多说,直接上图上代码! 首先需要获取数据,具体获取数据api请转到我跟我大兄弟博客去观看学习去,同时也感谢我 ...