Spring Custom Validator-使用参数

时间:2019-01-17 08:32:15

标签: java spring bean-validation hibernate-validator

我创建了一个自定义ConstraintValidator,其中isValid方法如下:

private String message;

@Override
public void initialize(InputValidator constraintAnnotation) {
    this.message = constraintAnnotation.message();
}

@Override
public boolean isValid(String inputValue, ConstraintValidatorContext context) {
    HibernateConstraintValidatorContext h = context.unwrap(HibernateConstraintValidatorContext.class);
    h.disableDefaultConstraintViolation();

    //logic goes here

    if(!valid) {
        h.addExpressionVariable("0", inputValue);
        h.buildConstraintViolationWithTemplate(this.message)
            .addConstraintViolation();
    }
    return valid;
}

messages.properties中我还有以下内容:

error.input=The value {0} is invalid.

我可以使用以上消息,并在百里香叶中用{0} bean替换MessageSource值,但是HibernateConstraintValidatorContext不会替换该值。

鉴于我的项目的限制,我无法更改消息格式,例如将其更改为The value ${0} is invalid.

我当前有显示响应“值userInput无效”的应用程序。其中“ userInput”是表单/对象中字段的名称。

1 个答案:

答案 0 :(得分:1)

因此{0}是一个消息参数,而${0}是一个表达式变量。

您必须使用#addMessageParameter()而不是#addExpressionVariable()。它是在Hibernate Validator 5.4.1中引入的,但是如果您使用的是旧版本,则仍应进行升级。