![](/img/trans.png)
[英]how to make spring starter project(spring boot) for Java version 6 in eclipse?
[英]How are hibernate Validators integrated into spring boot starter project
我经常对 spring 中的字段使用约束。 约束是标准的或自定义的
public abstract class OrganizationEntity {
@Length(min = 1 , max = 256, message = "Organization name max length is 256 and min length is 1")
@NotNull(message = "Organization name should not be empty")
@Pattern(regexp = "^[a-zA-Z0-9][-a-zA-Z0-9]+[a-zA-Z0-9]$",message = "Organization name can contain Alphanumeric character and Hyphen in the middle")
public abstract String getName();
}
在导航到长度或模式注释时,我看到注释 org.hibernate.validator.constraints 的定义
@Documented
@Constraint(
validatedBy = {}
)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(List.class)
public @interface Length {
int min() default 0;
int max() default Integer.MAX_VALUE;
String message() default "{org.hibernate.validator.constraints.Length.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface List {
Length[] value();
}
}
我看到 validBy 留空,这意味着有些机制/库已经实现了这些检查。 哪个库提供这些实现? spring 如何管理此验证流程。
Hibernate 提供验证实现,并由 Spring 使用。
我可能过于简单化了,但据我了解 Spring 为 Spring 的应用程序上下文使用配置了 Hibernate 的ValidationFactory
实现( ValidationFactoryImpl
)和Validator
和ExecutableValidator
实现( ValidatorImpl
),为其他BindingResult
组件公开它并将其转换为验证结果。
同时,Hibernate 的ValidatorImpl
使用验证上下文,其中ConstraintValidator
被注册为 map 与 package javax.validation.constraints
不同的注解作为键,以及与 Hibernate 自己的约束,如@URL
和@ISBN
. 这个 map 可以在ConstraintHelper
class 中找到。
例如,您可以找到在那里注册的PatternValidator
以验证带有@Pattern
注释的值。
然后我们有下一个 Hibernate 验证流程(再次 - 简化):
ValidatorImpl
尝试验证某些内容并创建MetaConstraint
(帮助 class 具有验证所需的所有信息);MetaConstraint
为多个约束检查创建ConstraintTree
;ConstraintTree
调用ConstraintValidatorManager
及其getInitializedValidator
方法,该方法从前面提到的 map 返回特定注释所需的ConstraintValidator
。 因此,Spring 使用的验证框架已经知道哪些ConstraintValidator
实例用于特定的验证注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.