【问题标题】:Spring Custom Validator - Interpolate message with parameterSpring Custom Validator - 使用参数插入消息
【发布时间】:2019-01-17 08:32:15
【问题描述】:

我创建了一个自定义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.

当在 thymeleaf 和 MessageSource bean 中使用它时,我可以使用上述消息并替换其中的 {0} 值,但是 HibernateConstraintValidatorContext 不会替换该值。

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

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

【问题讨论】:

    标签: java spring bean-validation hibernate-validator


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 1970-01-01
      • 2015-09-10
      • 2012-04-28
      • 2017-01-23
      • 2013-08-12
      • 2017-02-09
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多