如何使用构造函数中的 Java 验证器注释?
how to use Java validator annotations from constructor?
我有包含 String
的值对象。该字符串受一些限制(长度、允许的字符等)。
我想使用 Java 或 Spring 验证 API 来验证我的对象。
我想在创建时(在构造函数中)验证我的域对象。
实现的示例代码(使用验证 API 验证 this
):
void validate() {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
Set<ConstraintViolation<Msisdn>> violations = localValidatorFactoryBean.getValidator().validate(this);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
}
我不知道如何从构造函数中获取 javax.validation.Validator
的实例。
在 Spring 托管代码(服务)中,我可以 @Autowire
javax.validation.Validator
的实例
或 org.springframework.validation.Validator
并且有效。
但是如何让它在 Spring 托管代码之外工作(在值对象的构造函数中,它独立存在)?
我知道我可以使用 ifs 编写验证规则,但验证注释使代码更简单。
Hibernate Validator documentation describes how to get instance of javax.validation.Validator
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
但不适合在构造函数中构建ValidatorFactory
。这是一项耗时的操作。也许在 thrad-local 中使用缓存引用会有所帮助,但我不喜欢增加的复杂性。
最后,我决定使用以下方法为我的值对象编写验证规则
Guava Preconditions
Preconditions.checkNotNull(value, "value cannot be null");
我有包含 String
的值对象。该字符串受一些限制(长度、允许的字符等)。
我想使用 Java 或 Spring 验证 API 来验证我的对象。 我想在创建时(在构造函数中)验证我的域对象。
实现的示例代码(使用验证 API 验证 this
):
void validate() {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
Set<ConstraintViolation<Msisdn>> violations = localValidatorFactoryBean.getValidator().validate(this);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
}
我不知道如何从构造函数中获取 javax.validation.Validator
的实例。
在 Spring 托管代码(服务)中,我可以 @Autowire
javax.validation.Validator
的实例
或 org.springframework.validation.Validator
并且有效。
但是如何让它在 Spring 托管代码之外工作(在值对象的构造函数中,它独立存在)?
我知道我可以使用 ifs 编写验证规则,但验证注释使代码更简单。
Hibernate Validator documentation describes how to get instance of javax.validation.Validator
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
但不适合在构造函数中构建ValidatorFactory
。这是一项耗时的操作。也许在 thrad-local 中使用缓存引用会有所帮助,但我不喜欢增加的复杂性。
最后,我决定使用以下方法为我的值对象编写验证规则 Guava Preconditions
Preconditions.checkNotNull(value, "value cannot be null");