我为 Money 类编写了一个自定义的 Hibernate 验证约束:
@Target({METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = MoneyLimitedValidator.class)
@Documented
public @interface MoneyLimited {
String message() default "{error.validation.money.limited}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
它工作正常,除了错误消息。我看到非常奇怪的行为:找到资源包并按名称解析消息,但它包装成特殊字符,如果消息无法按名称解析,通常会出现:
??Incorrect sum value._en_EN??
这Incorrect sum value.
是一条正确的消息,被 name 接受error.validation.money.limited
。原来我的消息看起来是这样的:
error.validation.money.limited = Incorrect sum value.
我试图从消息名称中删除 {} 大括号 into MoneyLimited#message()
,但没有任何变化(更奇怪)。
我指定了我的验证消息包,如本答案中所述:
<annotation-driven validator="validator" />
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"/>
</bean>
所以问题是:如何修复消息?
我正在使用Spring Framework 3.2.4.RELEASE和Hibernate Validator 4.3.1.Final。