第一步,pom.xml引入hibernate-validator

  1. <dependency>
  2. <groupId>org.hibernate</groupId>
  3. <artifactId>hibernate-validator</artifactId>
  4. <version>5.2.4.Final</version>
  5. </dependency>

第二步,编写验证结果Bean,存放“验证是否有错误和错误信息”

  1. import org.apache.commons.lang3.StringUtils;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. public class ValidationResult {
  5. // 校验结果是否有错
  6. private boolean hasErrors = false;
  7. // 存放错误信息的Map
  8. private Map<String, String> errorMsgMap = new HashMap<>();
  9. public boolean isHasErrors() {
  10. return hasErrors;
  11. }
  12. public void setHasErrors(boolean hasErrors) {
  13. this.hasErrors = hasErrors;
  14. }
  15. public Map<String, String> getErrorMsgMap() {
  16. return errorMsgMap;
  17. }
  18. public void setErrorMsgMap(Map<String, String> errorMsgMap) {
  19. this.errorMsgMap = errorMsgMap;
  20. }
  21. // 将所有的错误信息拼接成一个字符串
  22. public String getErrorMsg(){
  23. return StringUtils.join(errorMsgMap.values().toArray(), ",");
  24. }
  25. }

第三步,

  1. import org.springframework.beans.factory.InitializingBean;
  2. import org.springframework.stereotype.Component;
  3. import javax.validation.ConstraintViolation;
  4. import javax.validation.Validation;
  5. import javax.validation.Validator;
  6. import java.util.Set;
  7. /**
  8. * InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。
  9. * Spring初始化完成后,会回调ValidatorImpl的afterPropertiesSet()方法
  10. */
  11. @Component
  12. public class ValidatorImpl implements InitializingBean {
  13. // 注意需要引用: javax.validation.Validator
  14. private Validator validator;
  15. // 实现校验方法并返回校验结果
  16. public ValidationResult validate(Object bean){
  17. ValidationResult validationResult = new ValidationResult();
  18. Set<ConstraintViolation<Object>> constraintViolationSet = validator.validate(bean);
  19. if(constraintViolationSet.size() > 0){
  20. // 大于0 表示有错误
  21. validationResult.setHasErrors(true);
  22. for (ConstraintViolation<Object> constraintViolation : constraintViolationSet) {
  23. String errorMsg = constraintViolation.getMessage();
  24. String propertyName = constraintViolation.getPropertyPath().toString();
  25. validationResult.getErrorMsgMap().put(propertyName, errorMsg);
  26. }
  27. }
  28. return validationResult;
  29. }
  30. @Override
  31. public void afterPropertiesSet() throws Exception {
  32. // 将hibernate validator通过工厂的初始化方式使其实例化
  33. validator = Validation.buildDefaultValidatorFactory().getValidator();
  34. }
  35. }

第四步,在Model中定义限制条件,并在业务逻辑中使用验证

  1. public class UserModel {
  2. private Integer id;
  3. @NotBlank(message = "name不能为空")
  4. private String name;
  5. @NotNull(message = "性别不能为空")
  6. private Byte gender;
  7. @NotNull(message = "年龄不能为空")
  8. @Min(value = 0, message = "年龄必须小于0")
  9. @Max(value = 150, message = "年龄不能大于150")
  10. private Integer age;
  11. @NotNull(message = "手机号码不能为空")
  12. @Size(min = 11, max = 11, message = "手机号码必须为11位")
  13. private String telphone;
  14. @NotNull(message = "注册方式不能为空")
  15. private String registerMode;
  16. private String thirdPartyId;
  17. @NotNull(message = "密码不能为空")
  18. private String encrptPassword;
  19. }
  20. ======================================================
  21. ValidationResult validationResult = validator.validate(userModel);
  22. if(validationResult.isHasErrors()){
  23. throw new BusinessException(EnumBusinessError.PARAMETER_VALIDATION_ERROR, validationResult.getErrorMsg());
  24. }

SpringBoot 通用Validator的更多相关文章

  1. SpringBoot使用validator校验

    在前台表单验证的时候,通常会校验一些数据的可行性,比如是否为空,长度,身份证,邮箱等等,那么这样是否是安全的呢,答案是否定的.因为也可以通过模拟前台请求等工具来直接提交到后台,比如postman这样的 ...

  2. SpringBoot 通用返回类设计

    在项目中通常需要为前端设计通过的返回类,返回的格式为: { "status": "success", "data": {...} } 定义通 ...

  3. SpringBoot 通用Error设计

    在项目中需要设计统一的错误消息,通常使用枚举类定义"错误码"与"错误消息": 并且也可以做错误消息自定义. 定义通过错误接口类:CommonError publ ...

  4. springboot 通用Mapper使用

    https://blog.csdn.net/dwf_android/article/details/79359360 https://www.cnblogs.com/larryzeal/p/58741 ...

  5. 【springboot】validator枚举值校验

    转自: https://blog.csdn.net/aiyaya_/article/details/78588200 一.前言 在spring项目中,校验参数功能使用hibernate validat ...

  6. SpringBoot学习历程

    新年新气象,更新了一下本人所有写的关于SpringBoot的文章目录,感谢大家长期以来的支持,在接下来的日子还会不定期的进行更新. 入门 使用IntelliJ Idea新建SpringBoot项目 S ...

  7. 【springboot】知识点总结

    [springboot 基础编] 01.SpringBoot>01 - 第一个应用–HelloWorld 02.SpringBoot>02 - 整合 MyBatis 03.SpringBo ...

  8. 通用mapper版+SpringBoot+MyBatis框架+mysql数据库的整合

    转:https://blog.csdn.net/qq_35153200/article/details/79538440 开发环境: 开发工具:Intellij IDEA 2017.2.3 JDK : ...

  9. 在Spring-Boot中实现通用Auth认证的几种方式

    code[class*="language-"], pre[class*="language-"] { background-color: #fdfdfd; - ...

随机推荐

  1. JS异步笔记

    Promise 最早接触异步是在.net中,当时还是比较流行使用基于控件的BackgroundWorker,其自身通过子线程的方式来异步处理一些情况,并且封装了一些功能与主线程通信.后来,开始使用Th ...

  2. js yield

    meikidd 发布在meikidd2015年5月6日view:3397 在文章任何区域双击击即可给文章添加[评注]!浮到评注点上可以查看详情. 隐藏标注 首先请原谅我的标题党(●—●),tj 大神的 ...

  3. SQL.Cookbook 读书笔记2 查询结果排序

    第二章 查询结果排序 2.1 按查询字段排序 order by sal asc; desc;-- 3表示sal 2.2 按子串查询 );--按job的最后两个字符排序 2.3 对字符数字混合排序 cr ...

  4. Mongo同步数据到Elasticsearch

    个人博客:https://blog.sharedata.info/ 最近需要把数据从Mongo同步到Elasticsearch环境:centos6.5python2.7pipmongo-connect ...

  5. jmeter对响应结果做正则、json、xpath结果测试

    上面的返回结果可用于关联取值测试 具体用法详见http://www.cnblogs.com/xinjing-jingxin/p/8554338.html http://goessner.net/art ...

  6. lua(仿单继承)

    --lua仿单继承 Account = { balance = } function Account:new(o) o = o or {} setmetatable(o, self)--Account ...

  7. hoj 2739 中国邮局问题

    /*若原图的基图不连通, 或者存在某个点的入度或出度为 0 则无解. 统计所有点的入度出度之差 Di, 对于 Di > 0 的点, 加边(s, i, Di, 0); 对于 Di < 0 的 ...

  8. 标准模板库--STL

    标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...

  9. FFF at Valentine(强连通分量缩点+拓扑排序)

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  10. Java中Solr集群的测试

    import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.common.SolrInputDoc ...