【问题标题】:Spring hibernate type validation with multiple error messages带有多个错误消息的 Spring 休眠类型验证
【发布时间】:2018-08-27 11:13:32
【问题描述】:

我想知道这样的事情是否可能。 我有一个名为“设备”的通用 DTO 类。设备持有 ID 和 IP。 我设置了一个内部正则表达式验证来验证 IP 是否输入正确。

但现在我想要另一个“验证此 IP 是否未被其他设备使用”类型的验证(用于更新和创建案例)。

为此,我编写了一个自定义的面向类型的 ConstraintValidator,我在其中完成了检查是否没有具有给定 IP 的其他设备的任务。

但从这一点开始,我想更进一步,并从一个 ConstraintValidator 进行多次检查和一些响应错误消息,对 Device 对象进行随机检查。

在这一点上,我找不到是否可以重新定义验证器的错误消息。这可能吗?

【问题讨论】:

  • 如果我对你的理解正确,那么this 是你的答案。
  • 谢谢。会尝试

标签: java spring hibernate hibernate-validator


【解决方案1】:

您可以使用以下我用于我自己的 API 的函数来做到这一点:

public static void setNewErrorMessage(String newErrorMessage, ConstraintValidatorContext context) {

    context.disableDefaultConstraintViolation();
    context.buildConstraintViolationWithTemplate(newErrorMessage)
            .addConstraintViolation();
}

这里的上下文对象是在任何ConstraintValidator实现类的isValid函数中传递的。

这样你就可以做类似的事情:

if(hasError1()) {
     setNewErrorMessage(ERROR1_MESSAGE, context);
     return false;
}

if(hasError2()) {
     setNewErrorMessage(ERROR2_MESSAGE, context);
     return false;
}

【讨论】:

  • 一只脚在那里:) 形成了约束,但没有使用“addConstraintViolation”。这个成功了。谢谢。
【解决方案2】:

您应该使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多