可以有两种使用方法:

第一种:在要检验的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 - 线程Join与interrupt

    Java多线程系列--“基础篇”08之 join() 概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_ ...

  2. Liunx下配置网络

    1.首先查看一下自己的网络 ifconfig 我查看之后发现....没有eth0 ok,现在去 /etc/sysconfig/network-scripts 目录中查看是否有 ifcfg-et0 文件 ...

  3. SpringMVC+Spring+MyBatis 整合与图片上传简单示例

    一.思路: (一) Dao层: 1. SqlMapConfig.xml,空文件即可.需要文件头.2. applicationContext_dao.xml. a) 数据库连接池b) SqlSessio ...

  4. POJ2955(KB22-C 区间DP)

    Brackets Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 7823Accepted: 4151 Description We ...

  5. Software-Defined Networking A Comprehensive Survey --阅读_day1

    The Internet has led to the creation of a digital society, where (almost) everything is connected an ...

  6. Parcel + Vue 2.x 极速零配置打包体验

    继 Browserify.Webpack 之后,又一款打包工具 Parcel 横空出世 Parcel.js 的官网有这样的自我介绍 “极速零配置Web应用打包工具” 简单接触了一下,单从效率上来说,确 ...

  7. hightcharts 如何修改legend图例的样式

    正常情况下hightcharts 的legend图形是根据他本身默认的样式来显示,如下图 这几个图形的形状一般也是改不了的,只能根据图表的类型显示默认的.但是我们可以通过修改默认的样式来展示一些可以实 ...

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

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

  9. <Android开源库> PagerSlidingTabStrip从头到脚

    简介 PagerSlidingTabStrip,是我个人经常使用到的一个和ViewPager配合的页面指示器,可以满足开发过程中常用的需求,如类似于今日头条的首页新闻内容导航栏等等,之前自己开发的Ju ...

  10. SD从零开始29-30

    SD从零开始29 外向交货单处理中的特殊功能 批次Batches 你可以在material handled in batches的相关详细屏幕指定一个batch(物料是否使用batches来处理标记在 ...