为什么要引入hibernate-validator

来源:3-13 优化校验规则

willwei

2019-01-22 16:07

在代码中没有看到使用hibernate-validator里面的内容呀

写回答 关注

1回答

  • 不知疲倦的旅者
    2019-01-22 20:01:35

    课程例讲解的很清楚了,在没有引入hibernate-validator之前,我们使用判空的方式来验证UserModel。

            //如果需要的信息为空,则抛出异常
            if (StringUtils.isEmpty(userModel.getName())
                   || userModel.getAge() == null
                   || userModel.getGender() == null
                   || StringUtils.isEmpty(userModel.getTelephone())
                   || StringUtils.isEmpty(userModel.getEncrptPassword())) {
                throw new BusinessException(EnumBussinessError.PARAMETER_VALIDATION_ERROR);
            }

    hibernate-validator是一个验证框架,可以大大简化验证的过程,增加了验证的细节

    首先我们对UserModel进行了改造

    @NotBlank(message = "用户名不能为空")
    private String name;
    
    @NotNull(message = "性别不能为空")
    private Byte gender;
    
    @NotNull(message = "年龄不能为空")
    @Min(value = 0, message = "年龄不能小于0")
    @Max(value = 150, message = "年龄不能大于150")
    private Integer age;
    
    @NotBlank(message = "手机号不能为空")
    private String telephone;
    
    private String registreMode;
    
    private String thirdPartyId;
    
    @NotBlank(message = "密码不能为空")
    private String encrptPassword;

    其次我们建立其了两个类,一个是ValidatorUtil,用来验证添加验证规则的UserModel;另一个类ValidatorResult,用来保存验证后的信息。

    验证代码就简化为:

    ValidatorResult validatorResult = validatorUtil.validate(userModel);
    if (validatorResult.getHasError()) {
        throw new BusinessException(EnumBussinessError.PARAMETER_VALIDATION_ERROR,validatorResult.getErrorMsg());
    }

    可以参考如下文章:

    SpringBoot 统一异常、数据校验处理



    慕容6363... 回复willwe...

    另一方面老师也说了 javax.validation 是 javax 内部实现的一套 validator 的接口并且能以 annotation 的方式来做对应的校验,而 hibernate-validator 则是对这套接口规范的实现,因为项目中已经引入了 hibernate-validator 的依赖,通过 Validation.buildDefaultValidatorFactory().getValidator() 就能获得由 hibernate-validator 实现的 validator

    2019-06-12 23:14:40

    共 5 条回复 >

SpringBoot构建电商基础秒杀项目

应用SpringBoot快速搭建拥有用户、商品、交易及秒杀活动的电商秒杀应用。

49064 学习 · 954 问题

查看课程

相似问题