第一步:定义ValidationResult类

public class ValidationResult {// 校验结果是否有错private boolean hasErrors = false;// 存放错误信息的Mapprivate Map<String, String> errorMsgMap = new HashMap<>();public boolean isHasErrors() {return hasErrors;}public void setHasErrors(boolean hasErrors) {this.hasErrors = hasErrors;}public Map<String, String> getErrorMsgMap() {return errorMsgMap;}public void setErrorMsgMap(Map<String, String> errorMsgMap) {this.errorMsgMap = errorMsgMap;}// 实现通用的 通过格式化字符串信息获取 所有错误结果的Message方法public String getErrorMsg(){return StringUtils.join(errorMsgMap.values().toArray(), ",");}
}

第二步:定义ValidatorImpl实现类

/*** InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。* Spring初始化完成后,会回调ValidatorImpl的afterPropertiesSet()方法*/
@Component
public class ValidatorImpl implements InitializingBean {private Validator validator;// 实现校验方法并返回校验结果public ValidationResult validate(Object bean){ValidationResult validationResult = new ValidationResult();Set<ConstraintViolation<Object>> constraintViolationSet = validator.validate(bean);if(constraintViolationSet.size() > 0){// 大于0 表示有错误validationResult.setHasErrors(true);for (ConstraintViolation<Object> constraintViolation : constraintViolationSet) {String errorMsg = constraintViolation.getMessage();String propertyName = constraintViolation.getPropertyPath().toString();validationResult.getErrorMsgMap().put(propertyName, errorMsg);}}return validationResult;}@Overridepublic void afterPropertiesSet() throws Exception {// 将hibernate validator通过工厂的初始化方式使其实例化validator = Validation.buildDefaultValidatorFactory().getValidator();}
}

第三步,在业务逻辑中调用

public class UserModel {private Integer id;@NotBlank(message = "name不能为空")private String name;@NotNull(message = "性别不能为空")private Byte gender;@NotNull(message = "年龄不能为空")@Min(value = 0, message = "年龄必须小于0")@Max(value = 150, message = "年龄不能大于150")private Integer age;@NotNull(message = "手机号码不能为空")@Size(min = 11, max = 11, message = "手机号码必须为11位")private String telphone;@NotNull(message = "注册方式不能为空")private String registerMode;private String thirdPartyId;@NotNull(message = "密码不能为空")private String encrptPassword;
    @Autowiredprivate ValidatorImpl validator;@Transactionalpublic void register(UserModel userModel) throws BusinessException {if(userModel == null){throw new BusinessException(EnumBusinessError.PARAMETER_VALIDATION_ERROR);}// ValidationResult validationResult = validator.validate(userModel);if(validationResult.isHasErrors()){throw new BusinessException(EnumBusinessError.PARAMETER_VALIDATION_ERROR, validationResult.getErrorMsg());}

转载于:https://www.cnblogs.com/vincenshen/p/10427947.html

SpringBoot 定义通过字段验证相关推荐

  1. abap视图字段限制_在 Laravel 控制器中进行表单请求字段验证

    在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式.很多 Web 框架都对此功能专门提供了工具集,Lara ...

  2. 【DRF框架】序列化组件——字段验证

    单个字段的验证 1.在序列化器里定义校验字段的钩子方法   validate_字段 2.获取字段的数据 3.验证不通过,抛出异常  raise serializers.ValidationError( ...

  3. web.xml.jsf_使用JSF 2.0可以更轻松地进行多字段验证

    web.xml.jsf 开发应用程序表单时最常见的需求之一是多字段验证(或跨字段验证,但我没有使用此术语,因为当我将其放在Google上时,实际上得到了一些战后图片). 我正在谈论的情况是,我们需要比 ...

  4. 使用JSF 2.0可以更轻松地进行多字段验证

    开发应用程序表单时最常见的需求之一是多字段验证(或跨字段验证,但我没有使用此术语,因为当我将其放在Google上时,实际上得到了一些战后图片). 我正在谈论的情况是,我们需要比较初始日期是早于结束日期 ...

  5. php字段验证规则,详解ThinkPHP中自动验证及验证规则

    本篇文章详细介绍了thinkphp中自动验证及验证规则的方法,希望对学习thinkphp的朋友有帮助! 详解ThinkPHP中自动验证及验证规则 ThinkPHP 内置了数据对象的自动验证功能来完成模 ...

  6. php字段验证规则,ThinkPHP 自动验证及验证规则详解

    ThinkPHP 自动验证及验证规则详解 ThinkPHP 自动验证 ThinkPHP 内置了数据对象的自动验证功能来完成模型的业务规则验证.自动验证是基于数据对象的,而大多情况下数据对象是基于 $_ ...

  7. 2021-07-31-DJ-007 Django 模型,自定义模型管理器Manager,自定义字段验证器Validdator

    一.模型 管理器 模型实例通过模型管理器获得并传递给使用者,修改默认的模型管理器,可以提前进行一些筛选步骤,比如筛掉已经注销的用户.已经取消的订单等等. 默认的模型管理器是django.db.mode ...

  8. web 表单自定义字段_带有自定义服务器字段验证的AJAX表单提交

    web 表单自定义字段 Overview 总览 This article presents a method for validating form data in a PHP script usin ...

  9. react 统一字段验证_如何使用React的受控输入进行即时表单字段验证

    react 统一字段验证 by Gosha Arinich 通过Gosha Arinich 如何使用React的受控输入进行即时表单字段验证 (How to use React's controlle ...

  10. Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))

    在Scrapy框架中的items.py的作用   1.可以预先定义好要爬取的字段     items.py import scrapyclass TencentItem(scrapy.Item):# ...

最新文章

  1. C++——创建类的时候用new与不用new 的区别(转)
  2. bat循环执行带参数_dos命令exit图文教程,结束退出CMD.EXE程序或当前bat批处理脚本...
  3. jenkins-cli命令使用总结
  4. 网关Ocelot功能演示完结,久等了~~~
  5. vim使用教程(全)-最好的编辑器 2015-04-09 18:26 40人阅读 评论(0) 收藏...
  6. 富士施乐2022网络扫描设置_富士施乐(FUJI XEROX)全系列复印机产品介绍
  7. rust实现wss访问_Rust的所有权,第2部分
  8. 【matlab】随意记录
  9. C++ Qt学习笔记(4)绘图
  10. NLP预训练家族 | 自成一派的GPT!
  11. 挣多少钱让你觉得生存无忧,有底气做感兴趣的事?
  12. 修改了一个YUV/RGB播放器
  13. 掌上百度2011java_掌上百度2011通用版 掌上百度 Java空间版
  14. 实名认证失败_公安实名认证失败是什么原因
  15. 结构体数组定义时初始化
  16. 帅帅什么意思_帅帅帅是什么意思
  17. 领导邀请一起跳槽?搞清楚这5件事再决定
  18. 选择工业相机需要知道的50个问题
  19. 追风逐日,Wi-SUN助推新能源数字化
  20. 鸿蒙系统自带app分身,哪些手机自带应用分身功能 自带应用分身功能手机推荐...

热门文章

  1. go-mysql数据-查询--输入数据--实战2
  2. java-idea-3批处理文件运行jar包
  3. JS实现报表标题动态滚动效果
  4. python是一种跨平台开源免费的高级动态编程_Python是一种跨平台、开源、免费的高级动态编程语言。...
  5. c++自动抢购_小黄人汽车手机支架多功能出风口高档可充电全自动导航卡通支架2元优惠券券后价22.9元...
  6. 用c#转换word或excel文档为html文件,C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例...
  7. js 改变change方法_JS获取和设置元素的属性以及属性值
  8. mac本地代码上传git
  9. Spring源码解读(1)-IOC容器BeanDefinition的加载
  10. 体验WebEx网络会议