我想知道这样的事情是否可能。 我有一个通用的DTO类,称为“设备”。设备拥有ID和IP。 我设置了一个内部正则表达式验证,以验证IP是否正确输入。
但是现在我要进行另一种类型的验证:“验证此IP是否被另一台设备不使用”(用于更新和创建案例)。
为此,我编写了一个自定义的面向类型的ConstraintValidator,在其中,我完成了检查是否不是具有给定IP的其他设备的任务。
但是从这一点出发,我想走得更远,并从一个ConstraintValidator获得几项检查和几条响应错误消息,并对Device对象进行随机检查。
在这一点上,我找不到是否可以重新定义验证器的错误消息。这可能吗?
答案 0 :(得分:2)
您可以使用我用于自己的API的以下功能来做到这一点:
public static void setNewErrorMessage(String newErrorMessage, ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(newErrorMessage)
.addConstraintViolation();
}
此处的上下文对象是在任何isValid
实现类的ConstraintValidator
函数中传递的。
这样,您将可以执行以下操作:
if(hasError1()) {
setNewErrorMessage(ERROR1_MESSAGE, context);
return false;
}
if(hasError2()) {
setNewErrorMessage(ERROR2_MESSAGE, context);
return false;
}
答案 1 :(得分:1)
您应该使用Hibernate Bean Validation API来构建类似下面的代码。
HibernateValidatorConfiguration configuration = Validation
.byProvider( HibernateValidator.class )
.configure();
ConstraintMapping constraintMapping = configuration.createConstraintMapping();
constraintMapping
.type( Car.class )
.property( "manufacturer", FIELD )
.constraint( new NotNullDef() )
.property( "licensePlate", FIELD )
.ignoreAnnotations( true )
.constraint( new NotNullDef() )
.constraint( new SizeDef().min( 2 ).max( 14 ) )
.type( RentalCar.class )
.property( "rentalStation", METHOD )
.constraint( new NotNullDef() );
Validator validator = configuration.addMapping( constraintMapping )
.buildValidatorFactory()
.getValidator();