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();

看看http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-programmatic-api