我使用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
我不知道为什么它不起作用,任何人都可以帮忙解决它?感谢。
答案 0 :(得分:2)
我找到原因。它是由属性“useCodeAsDefaultMessage”引起的,我们无法将其设置为“true”,只使用默认值“false”。看来如果它是真的,只需从“basenames”中的属性文件中获取消息,并且不要在类路径根路径或“org / hibernate / validator”中使用默认消息文件!