【校验处理】一、Java Bean Validation验证

2021-06-07 00:02

阅读:453

标签:val   元素   rop   姓名   mat   data   prope   code   stack   

在真实的开发中,我们经常会遇到需要对数据进行校验的业务,那么本篇文章对此进行总结。暂时总结三种方法,大家可以根据需要选择使用。

一、Java Bean Validation 验证  【校验处理】一、Java Bean Validation验证  

二、SpringBoot Validate 统一处理

三、Spring Validation 校验处理

 

本篇文章采用第一种Java Bean Validation的验证方式。话不多说,直接上代码。

1. 引入依赖

注意:java bean validation参数验证,在使用的时候,有时候会报错,原因是跟spring版本不兼容,这里演示的版本如下:

dependency>
    groupId>org.hibernategroupId>
    artifactId>hibernate-validatorartifactId>
    version>5.1.1.Finalversion>
dependency>
dependency>
    groupId>javax.validationgroupId>
    artifactId>validation-apiartifactId>
    version>1.1.0.Finalversion>
dependency>
dependency>
    groupId>org.springframework.bootgroupId>
    artifactId>spring-boot-dependenciesartifactId>
    version>2.3.1.RELEASEversion>
    type>pomtype>
    scope>importscope>
dependency>

2. 测试实体类

注意:将需要的校验规则直接通过注解写在实体类对应字段上即可

@Data
@AllArgsConstructor
public class Test {
    @Length(min = 1,max = 5,message = "姓名长度应该在1-5之间")
    private String name;
    @Range(min = 1,max = 100,message = "年龄应该在1-100之间")
    private Integer age;
    @DecimalMax(value = "100.00",message = "体重有些超标哦")
    @DecimalMin(value = "60.00",message = "多吃点饭吧")
    private BigDecimal weight;
    @Future(message = "元素必须是一个将来的日期")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date date;
    @AssertTrue(message = "此值只能为true")
    private Boolean isuser;
    @Email(message = "邮箱地址无效")
    private String email;
}

3. 校验工具类

注意:

(1)如果想要使用,直接调用ValidationUtils.validate参数直接传实体对象即可。

(2)validate方法可以优化,常见的是新建一个set集合,将所有的提示消息放到set中之后返回即可。

public class ValidationUtils implements Serializable {
    public static void main(String[] args) {
        Test test = new Test("张三张三张三",0,new BigDecimal(110.00),new Date(),false,"12345");
        validate(test);
    }

    private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

    public static  String validate(T t) {

        try {
            Validator validator = factory.getValidator();
            Set> constraintViolations = validator.validate(t);
            for (ConstraintViolation constraintViolation : constraintViolations) {
                System.out.println("invalidvalue: "+constraintViolation.getInvalidValue() == null?"":constraintViolation.getInvalidValue().toString()+"  propertypath: "+constraintViolation.getPropertyPath()+"  message: "+constraintViolation.getMessage());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
}

4. 总结一波实体类上支持的注解

技术图片

 

 

 

参考:

1. https://www.cnblogs.com/xiaogangfan/p/5987659.html

2. https://cloud.tencent.com/developer/ask/126580

持续更新!!!

 

【校验处理】一、Java Bean Validation验证

标签:val   元素   rop   姓名   mat   data   prope   code   stack   

原文地址:https://www.cnblogs.com/flyinghome/p/14597256.html


评论


亲,登录后才可以留言!