【发布时间】:2017-08-17 16:10:02
【问题描述】:
我正在尝试使用 Hibernate Validation 6.0.1 定义约束定义,其中验证器相对于约束注释位于不同的位置(.jar/project)。 Aka,我有我想要验证的对象,这些对象位于项目“api”中,带有注释定义,但我将在项目“modules/common”中拥有验证器
我正在关注the documentation 中描述的内容。
配置文件
@Bean
public Validator validator() {
HibernateValidatorConfiguration configuration = Validation
.byProvider( HibernateValidator.class )
.configure();
ConstraintMapping constraintMapping = configuration.createConstraintMapping();
constraintMapping
.constraintDefinition(ValidationComplexePerson.class)
.validatedBy(ValidationComplexePersonValidator.class);
return configuration.addMapping( constraintMapping )
.buildValidatorFactory()
.getValidator();
约束注解
@Documented
@Constraint(validatedBy = { })
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
public @interface ValidationComplexePerson {
...}
验证器
public class ValidationComplexePersonValidator
implements ConstraintValidator<ValidationComplexePerson, Personne> {
@Override
public void initialize(ValidationComplexePerson constraintAnnotation) {
}
@Override public boolean isValid(
Personne personne,
ConstraintValidatorContext constraintValidatorContext) {
if (personne.nom.matches(".*\\d+.*")) {
return false;
}
return true;
}
我的问题 我遇到的问题是,如果我没有将“@Constraint(validatedby={})”放在注释中,我会收到错误
HV000116:注解类型必须在创建约束定义时使用@javax.validation.Constraint 进行注解。
当到达 Bean 配置中的“.constraintDefinition”时。
另一方面,如果我输入“@Constraint(validatedby={})”,我会得到 p>
错误:(17, 1) java: 对于非组合约束,验证器 必须使用@Constraint#validatedBy() 指定实现。
关于这个解决方案可以穿什么或替代方案的任何建议?
我也尝试了here提供的程序。
【问题讨论】:
标签: java validation javabeans bean-validation hibernate-validator