我尝试设置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}."
如果我遗漏任何东西,请告诉我。
由于
答案 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"
希望这会有所帮助。