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

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

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

二、SpringBoot Validate 统一处理  【校验处理】二、SpringBoot Validate 统一处理

三、Spring Validation 校验处理   【校验处理】三、Spring Validation 校验处理

 

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

1. 引入依赖

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

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.1.Final</version>
</dependency>
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.1.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</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 <T> String validate(T t) {

        try {
            Validator validator = factory.getValidator();
            Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
            for (ConstraintViolation<T> 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

持续更新!!!

 

posted @ 2021-03-30 16:02  夏夜凉凉  阅读(1027)  评论(0编辑  收藏  举报