【校验处理】一、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
持续更新!!!