SpringBoot 定义通过字段验证
第一步:定义ValidationResult类
public class ValidationResult {
    // 校验结果是否有错
    private boolean hasErrors = false;
    // 存放错误信息的Map
    private 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;
    }
    @Override
    public 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;
    @Autowired
    private ValidatorImpl validator;
    @Transactional
    public 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());
        }
SpringBoot 定义通过字段验证的更多相关文章
- SpringBoot之表单验证@Valid
		转自:https://www.cnblogs.com/chenlove/p/8708627.html SpringBoot提供了强大的表单验证功能实现,给我们省去了写验证的麻烦: 这里我们给下实例,提 ... 
- [ASP.NET MVC]如何定制Numeric属性/字段验证消息
		原文:[ASP.NET MVC]如何定制Numeric属性/字段验证消息 对于一个Numeric属性/字段,ASP.NET MVC会自动进行数据类型的验证(客户端验证),以确保输入的是一个有效的数字, ... 
- C#基础(202)--类定义,字段与属性,自动属性,方法及常见错误
		c#类的定义规范 字段与属性的比较: 字段: 字段主要是为类的内部做数据交换交互使用,字段一般是private 字段可以赋值,也可以取值 当字段需要为外部数据提供数据的时候,请将字段封装为属性,而不是 ... 
- django 表单验证和字段验证
		表单验证和字段验证 表单验证发生在数据验证之后.如果你需要自定义这个过程,有几个不同的地方可以修改,每个地方的目的不一样.表单处理过程中要运行三种类别的验证方法.它们通常在你调用表单的is_valid ... 
- 18.Shiro与Springboot整合下登陆验证UserService未注入的问题
		Shiro与Springboot整合下登陆验证UserService未注入的问题 前言: 刚开始整合的情况下,UserService一执行,就会报空指针异常. 看了网上各位大神的讲解,什么不能用ser ... 
- 结构字段验证--validator.v9
		官网:https://godoc.org/gopkg.in/go-playground/validator.v9#hdr-Baked_In_Validators_and_Tags package va ... 
- 【DRF框架】序列化组件——字段验证
		单个字段的验证 1.在序列化器里定义校验字段的钩子方法 validate_字段 2.获取字段的数据 3.验证不通过,抛出异常 raise serializers.ValidationError( ... 
- Django项目:CRM(客户关系管理系统)--38--30PerfectCRM实现King_admin编辑自定义字段验证
		# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ... 
- [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用
		本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ... 
随机推荐
- hdu3665-Seaside(SPFA,dijkstra,floyd)
			Seaside Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ... 
- iOS开源库–最全的整理
			本文转载至 http://www.code4blog.com/archives/505 youtube下载神器:https://github.com/rg3/youtube-dl我擦咧vim插件:ht ... 
- python中的self
			1.首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. self名称不是必须的,在python中se ... 
- iOS 如何用JSONKit读写JSON文件
			如何用JSONKit读写JSON文件 分类: ios2013-04-20 12:46 510人阅读 评论(0) 收藏 举报 JSON文件格式简单,使用方便,值得一用. 目前已经有多个库支持Json文 ... 
- MySQL安装和Navicat安装、破解
			1)mysql下载 地址:https://dev.mysql.com/downloads/mysql/ 2)一路next安装,安装好后文件目录如下(不包括data文件夹,my.ini文件) 3)新建文 ... 
- Cutoff frequency
			Cutoff frequency - Wikipedia https://en.wikipedia.org/wiki/Cutoff_frequency In physics and electrica ... 
- 剩余参数(rest arguments)  Mixin
			Mixin – Pug 中文文档 https://pug.bootcss.com/language/mixins.html 混入 Mixin 混入是一种允许您在 Pug 中重复使用一整个代码块的方法. ... 
- BaseDao 接口
			// 以后所有的 Dao 接口都需要继承 BaseDao 接口; // 自定义泛型接口 public interface BaseDao<T>{ public void save(T t) ... 
- FastReports_4.14.1 _Cliff手动安装
			首次编译frx15.dproj包的时候,会出错: [DCC Fatal Error] fs15.dpk(59): F1026 File not found: 'fs_ipascal.dcu'原因是因为 ... 
- java maven项目打包
			使用IDEA打包,首先调出来maven projects窗口: 菜单栏Help->Find Action(Ctrl+Shift+A),输入Maven projects https://blog. ... 
