为什么使用Hibernate Validator的Spring消息插值参数替换不起作用?

时间:2015-04-02 14:58:54

标签: hibernate bean-validation hibernate-validator

我使用Spring4 + Hibernate5 Validator进行验证。

我不想使用默认的ValidateMessage.properties,所以我在类路径根目录的I18N目录下定义了自己的消息属性, 配置信息如下:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames" value="I18N.messages,I18N.validation.ValidationMessages" />
    <property name="defaultEncoding" value="UTF-8" />
    <!-- Set whether to use the message code as default message instead of throwing a NoSuchMessageException. 
        Useful for development and debugging. 
        Default is "false".-->
    <property name="useCodeAsDefaultMessage" value="true"/>
    <!-- The key here is fallbackToSystemLocale which prevents the system to look into the system, 
        thus using "message.properties" if he doesn't find the locale. -->
    <property name="fallbackToSystemLocale" value="false"/>
</bean>

    <!-- Validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource" ref="messageSource"/>
</bean>

<mvc:annotation-driven validator="validator"/> 

bean验证信息是:

 @Size(
        min = 2,
        max = 14,
        message = "The license plate must be between {min} and {max} characters long"
)

我在Spring应用程序中使用此表示法但这些参数未被替换。我回来了#34;牌照必须介于最长和最长字符之间&#34;。

参考Spring Message Interpolation Argument Replacement using Hibernate Validator

我不知道为什么它不起作用,任何人都可以帮忙解决它?感谢。

1 个答案:

答案 0 :(得分:2)

我找到原因。它是由属性“useCodeAsDefaultMessage”引起的,我们无法将其设置为“true”,只使用默认值“false”。看来如果它是真的,只需从“basenames”中的属性文件中获取消息,并且不要在类路径根路径或“org / hibernate / validator”中使用默认消息文件!