我尝试使用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;
}
我的问题 我遇到的问题是,如果我没有把#34; @Constraint(validatedby = {})&#34;在Annotation中,我收到了错误
HV000116:在创建约束定义时,必须使用@ javax.validation.Constraint对注释类型进行注释。
到达&#34; .constraintDefinition&#34;在Bean配置中。
另一方面,如果我把&#34; @Constraint(validatedby = {})&#34;,我得到了
错误:(17,1)java:对于非组合约束的验证器 必须使用@ Constraint#validatedBy()指定实现。
有关该解决方案可能是什么或替代方案的任何建议?
我还尝试了here提供的程序。
答案 0 :(得分:1)
我怀疑你正在使用注释处理器,因为你的第二个错误来自它?
问题是在这种情况下注释处理器检查不正确。我认为我们应该删除它,因为无法使用编程API进行此检查。
暂时删除注释处理器,它应该可以正常工作。