SpringMVC下用Hibernate Validator 乱码

来源:互联网 发布:域名注册申请流程 编辑:程序博客网 时间:2024/05/23 19:24

概述:



DTO文件:

@NotNull 
@Size(min=2, max=30, message="{firstName.size}")
private String firstName;
@NotNull
@Size(min=2, max=30,message="{lastName.size}")
private String lastName;
@NotNull
@Email(message="{email.valid}")
private String email;
@NotNull
@Size(min=5, max=16,message="{username.size}")

private String username;
@NotNull
@Size(min=5, max=25,message="{password.size}")
private String password;

配置文件:

firstName.size=First name 必须在 {min} 到 {max} 字符长度之间.
lastName.size=last name 必须在 {min} 到 {max} 字符长度之间.
username.size=username 必须在 {min} 到 {max} 字符长度之间.
password.size=password必须在 {min} 到 {max} 字符长度之间.
email.valid=email 地址必须有效。


日志:

[org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.NotNullValidator'
[org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.NotNullValidator'
[org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.size.SizeValidatorForCharSequence'
[org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.size.SizeValidatorForCharSequence'
[org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - ValidationMessages found.
[org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - ContributorValidationMessages not found.
[org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - org.hibernate.validator.ValidationMessages found.
[org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.size.SizeValidatorForCharSequence'
[org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.size.SizeValidatorForCharSequence'
[org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - ValidationMessages found.
[org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - ContributorValidationMessages not found.
[org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - org.hibernate.validator.ValidationMessages found.

问题出在:HIbernate Validation 通过 PlatformResourceBundleLocator 加载属性文件,最后资源是ResourceBundle 

找了半天那里设置字符编码UTF-8,却发现没有,它根据Locale进行区分读取文件。读取文件默认编码是ISO-8859-1,而ISO-8859-1的properties文件是这样的

firstName.size=First name \u5FC5\u987B\u5728 {min} \u5230 {max} \u5B57\u7B26\u957F\u5EA6\u4E4B\u95F4.
lastName.size=last name \u5FC5\u987B\u5728 {min} \u5230 {max} \u5B57\u7B26\u957F\u5EA6\u4E4B\u95F4.
username.size=username \u5FC5\u987B\u5728 {min} \u5230 {max} \u5B57\u7B26\u957F\u5EA6\u4E4B\u95F4.
password.size=password\u5FC5\u987B\u5728 {min} \u5230 {max} \u5B57\u7B26\u957F\u5EA6\u4E4B\u95F4.
email.valid=email \u5730\u5740\u5FC5\u987B\u6709\u6548\u3002

看得不爽改成UTF-8,这下完蛋,乱码了,如果你是采用其他进行加载资源,如下可以设置字符编码,你可以自由发挥。

@Bean
public MessageSource messageSource(){
ResourceBundleMessageSource messageSource =
new ResourceBundleMessageSource();
messageSource.setBasename("messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}

所以如果你properties文件显示汉字你得注意了,最后解决办法就是设置为ISO-8859-1,再次粘贴你内容,properties文件不要乱动。

原创粉丝点击