在Spring中整合Hibernate-validator时,在自定义校验信息时无法输出键值对应的国际化信息直接原因输出使用注解配置的message,在其他网站上有过相同的问题提出,也是没有解决,在不适用自定义国际化信息时可以正常显示hibernate-validator中的默认国际化信息
Spring种的配置
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="useCodeAsDefaultMessage" value="false"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="fallbackToSystemLocale" value="true"/>
<property name="basenames">
<list>
<value>classpath:bundle/messages</value>
<value>classpath:org/hibernate/validator/ValidationMessages</value>
</list>
</property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<property name="validationMessageSource" ref="messageSource"/>
</bean>
<mvc:annotation-driven validator="validator" />
java控制器中的代码
@RequestMapping("valid-user")
@ResponseBody
public String validUserVo(@Valid @ModelAttribute UserVo user, BindingResult rs, ModelMap model) {
logger.info("user:{}", user);
logger.info("bind result:{}\nerror:{}", rs, rs.getFieldErrors());
List<FieldError> errors = rs.getFieldErrors();
for (FieldError error : errors) {
String msg = error.getDefaultMessage();
String code = error.getCode();
logger.error("code:{},msg:{}",code, msg);
}
logger.info("model map:{}", model);
if (rs.hasErrors()) {
return rs.toString();
}
return "page";
}
配置校验的模型类代码
public class UserVo {
@Size(min=2,max = 6,message="{size.u.name.len}")
//@Size(min=2,max = 6)
private String name;
@Max(value=1,message="{max.sex}")
//@Max(value=1)
private int sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@Override
public String toString(){
return ToStringBuilder.reflectionToString(this);
}
}
messages_zh_CN.properties配置
size.u.name.len=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A\u957F\u5EA6\u5728{min}\u548C{max}\u4E4B\u95F4
max.sex=\u8D85\u8FC7\u6700\u5927\u503C{value}
输出的在界面上的错误提示信息是:{size.u.name.len},不是语言文件配置的国际化信息
这个配置出错了:
正确的配置方式: