消息插值不起作用

时间:2015-10-17 14:39:45

标签: java spring spring-mvc

我尝试设置API,并在向我的数据传输对象发送映射请求时进行验证。我在使用Interpolate我的数据库驱动的Message Source时出现问题。我的数据库中的记录有占位符:

 id,oplock,code,msg,locale
 9,0,minmax_password,"Password length should be a minimum of {1} and maximum of {2}.","en"

我有这个属性的数据传输对象(应该映射到我的请求):

@NotBlank(message = "{notnull_password}")
@Size(min = 6, max = 20,message = "{minmax_password}")
private String password;

这是我的XML设置:

 <beans:bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <beans:property name="validationMessageSource" ref="messageSourceServiceImp"/>
</beans:bean>

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

为简洁起见,我删除了MessageSource实现,但正如所提到的那样,它是数据库驱动的。现在,当我提交Password不符合最低要求的请求时,它会抛出一个错误,并调用MessageSource,返回记录......到目前为止一切都很好。我观察到的是它随后调用了{1}的MessageSource(它是来自MessageSource&#39; s记录的占位符);我原以为这会被声明min中的@Size(min = 6, max = 20,message = "{minmax_password}")所取代。结果,这会返回:

      "Password length should be a minimum of {1} and maximum of {2}."

如果我遗漏任何东西,请告诉我。

由于

1 个答案:

答案 0 :(得分:0)

Hibernte Validator似乎没有使用数字索引 {1},{2}等。因此,我必须使用 {min},{max} 。同样对于数据库驱动的MessageSource,它通常返回一个MessageFormat对象。此对象需要数字索引而不是文本。使用 {min} 会抛出NumberFormatException,因为它无法解析min。因此,您需要做的是将 {min} 放在单引号中;这将告诉MessageFormat忽略该部分。示例:

 9,0,minmax_password,"Password length should be a minimum of '{min}' and maximum of '{max}'.","en"

希望这会有所帮助。