Spring 带有多个错误消息的休眠类型验证
Spring hibernate type validation with multiple error messages
我想知道这样的事情是否可能。
我有一个名为 "Device" 的通用 DTO class。设备持有 ID 和 IP。
我设置了内部正则表达式验证来验证 IP 是否输入正确。
但现在我想再进行一次 "verify if this IP is not used by another device" 类型的验证(对于更新和创建案例)。
为此,我编写了一个自定义的面向类型的 ConstraintValidator,我在其中完成了检查是否没有其他具有给定 IP 的设备的任务。
但从这一点来看,我想更进一步,从一个 ConstraintValidator 中进行多次检查和多次响应错误消息,对 Device 对象进行随机检查。
关于这一点,我找不到是否可以重新定义验证器的错误消息。这可能吗?
您可以使用我自己使用的以下函数来执行此操作 API :
public static void setNewErrorMessage(String newErrorMessage, ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(newErrorMessage)
.addConstraintViolation();
}
此处的上下文对象在任何 ConstraintValidator
实现 class 的 isValid
函数中传递。
这样您就可以执行类似的操作:
if(hasError1()) {
setNewErrorMessage(ERROR1_MESSAGE, context);
return false;
}
if(hasError2()) {
setNewErrorMessage(ERROR2_MESSAGE, context);
return false;
}
您应该使用 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();
我想知道这样的事情是否可能。 我有一个名为 "Device" 的通用 DTO class。设备持有 ID 和 IP。 我设置了内部正则表达式验证来验证 IP 是否输入正确。
但现在我想再进行一次 "verify if this IP is not used by another device" 类型的验证(对于更新和创建案例)。
为此,我编写了一个自定义的面向类型的 ConstraintValidator,我在其中完成了检查是否没有其他具有给定 IP 的设备的任务。
但从这一点来看,我想更进一步,从一个 ConstraintValidator 中进行多次检查和多次响应错误消息,对 Device 对象进行随机检查。
关于这一点,我找不到是否可以重新定义验证器的错误消息。这可能吗?
您可以使用我自己使用的以下函数来执行此操作 API :
public static void setNewErrorMessage(String newErrorMessage, ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(newErrorMessage)
.addConstraintViolation();
}
此处的上下文对象在任何 ConstraintValidator
实现 class 的 isValid
函数中传递。
这样您就可以执行类似的操作:
if(hasError1()) {
setNewErrorMessage(ERROR1_MESSAGE, context);
return false;
}
if(hasError2()) {
setNewErrorMessage(ERROR2_MESSAGE, context);
return false;
}
您应该使用 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();