可以有两种使用方法:

第一种:在要检验的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. Sql Server 与 MySql 在使用 update inner join 时的区别

    Sql Server -- 不使用别名 UPDATE tb_User SET tb_User.pass = '' FROM tb_User usr INNER JOIN tb_Address addr ...

  2. 多线程系列(3)任务Task

    虽然使用线程池ThreadPool让我们使用多线程变得容易,但是因为是由系统来分配的,如果想对线程做精细的控制就不太容易了,比如某个线程结束后执行一个回调方法.恰好Task可以实现这样的需求.这篇文章 ...

  3. Java 内部类、静态内部类、匿名内部类

    java提高篇(八)----详解内部类 概念 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引 ...

  4. HDU1074(KB12-D 状态压缩dp)

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. mysql小试题

    1. 用户登录日志表 xes_user_login_logs 如下: (1) 检索登录超过两次的用户ID(sql语句) select user_id from vvt_ceshi group by u ...

  6. JS简单验证

    1.验证是否全为数字 2.验证邮箱 3验证手机号 4.验证身份证号 5.验证时间格式 下面是代码,可直接用,有注释 <html> <meta charset="utf-8& ...

  7. 18:Tomorrow never knows?

    18:Tomorrow never knows? 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 甲壳虫的<A day in the life>和 ...

  8. drupal7 获取profile2模块自定义字段的值

    $user=user_load($uid); $student=profile2_load_by_user($user,'student'); 这个函数官方有文档,通过用户对象返回用户的profile ...

  9. 在vue项目中,通过v-for循环,动态添加后台返回的事件

    一.现有一种业务需求,前端的某个元素添加点击事件,但事件是后台返回的(不确定),需要动态添加,下面是具体思路: .假定后台返回数据为如下格式: list: [ { name: '李寻欢', kungF ...

  10. mysql index hint 在index不存在时的处理

    关于index_hint 在mysql查询语句中可以通过指定index_hint来告诉优化器如何使用索引,详细可以参考这里 index_hint: USE {INDEX|KEY} [FOR {JOIN ...