Spring MessageSource中验证消息的动态表达式变量

时间:2017-11-17 15:48:52

标签: java spring hibernate validation

我正在使用 Hibernate Validator MessageSource来本地化违规邮件。

class FooValidator implements ConstraintValidator<ValidFoo, Foo>

    @Override
    public void initialize(ValidTransitions constraintAnnotation) {
    }

    @Override
    public boolean isValid(Foo foo, ConstraintValidatorContext context) {

        //some calculations

        String result = calculations.toString();

        HibernateConstraintValidatorContext hibernateContext = context.unwrap(HibernateConstraintValidatorContext.class);
        hibernateContext.disableDefaultConstraintViolation();
        hibernateContext.addExpressionVariable("invalidResult", result)
                .buildConstraintViolationWithTemplate("Invalid field: ${invalidResult}")
                .addConstraintViolation();
        return false;
    }
}

我希望messages.properties中有类似的内容:

ValidFoo.foo=Localized invalid field message, field: ${invalidResult}

但是我找不到从FooValidator向消息属性注入动态参数的方法。

1 个答案:

答案 0 :(得分:1)

命名参数和表达式变量只能由Hibernate解析。

Spring使用MessageFormat。

有关详细信息,请参阅AbstractMessageSource.getMessageInternal。