java validate方法_Spring Validation方法实现原理分析

时间:2025-03-11 08:38:30

最近要做动态数据的提交处理,即需要分析提交数据字段定义信息后才能明确对应的具体字段类型,进而做数据类型转换和字段有效性校验,然后做业务处理后提交数据库,自己开发一套校验逻辑的话周期太长,因此分析了Spring Validation的实现原理,复用了其底层花样繁多的Validator,在此将分析Spring Validation原理的过程记录下,不深入细节

如何使用Spring Validation

Spring Bean初始化时校验Bean是否符合JSR-303规范

1、手动添加BeanValidationPostProcessor Bean

2、在model类中定义校验规则,如@Max、@Min、@NotEmpty

3、声明Bean,综合代码如下:

@Bean

public BeanPostProcessor beanValidationPostProcessor() {

return new BeanValidationPostProcessor();

}

@Bean

public UserModel getUserModel() {

UserModel userModel = new UserModel();

(null);

("123");

return userModel;

}

@Data

class UserModel {

@NotNull(message = "username can not be null")

@Pattern(regexp = "[a-zA-Z0-9_]{5,10}", message = "username is illegal")

private String username;

@Size(min = 5, max = 10, message = "password's length is illegal")

private String password;

}

4、BeanValidationPostProcessor Bean内部有个boolean类型的属性afterInitialization,默认是false,如果是false,在postProcessBeforeInitialization过程中对bean进行验证,否则在postProcessAfterInitialization过程对bean进行验证

5、此种校验使用了spring的BeanPostProcessor逻辑

6、校验底层调用了doValidate方法,进一步调用,默认validator为HibernateValidator,validation-api包为JAVA规范,Spring默认的规范实现为hibernate-validator包,此hibernate非ORM框架Hibernate

protected void doValidate(Object bean) {

( != null, "No Validat