Java 读取utf-8编码的验证消息
如何更改验证消息的资源包?默认的是将我的ValidationMessages.properties读取为ISO-8859-1(我猜),但它是UTF-8。我试过这个:Java 读取utf-8编码的验证消息,java,spring,hibernate,hibernate-validator,spring-4,Java,Spring,Hibernate,Hibernate Validator,Spring 4,如何更改验证消息的资源包?默认的是将我的ValidationMessages.properties读取为ISO-8859-1(我猜),但它是UTF-8。我试过这个: @Configuration @EnableWebMvc @ComponentScan public class ApplicationConfiguration extends WebMvcConfigurerAdapter{ @Bean( name = "messageSource" ) public Relo
@Configuration
@EnableWebMvc
@ComponentScan
public class ApplicationConfiguration extends WebMvcConfigurerAdapter{
@Bean( name = "messageSource" )
public ReloadableResourceBundleMessageSource validationMessageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("ValidationMessages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
validatorFactoryBean.setValidationMessageSource(validationMessageSource());
return validatorFactoryBean;
}
@Override
public Validator getValidator() {
return validator();
}
无论我在这里放了什么,Hibernate都不会使用它来获取消息。
有什么建议吗?
我使用的是Hibernate 5和Spring 4。
.properties
文件是按照ISO-8859-1
编码(又名Latin-1
)中的规范读取的(请参见和)。因此,您需要指定unicode字符,而不是将文件保存为UTF-8
要在Hibernate中使用LocalValidatoryFactoryBean
,您需要将其连接到JPA,否则它将使用默认值
将以下属性添加到LocalContainerEntityManagerFactoryBean
的JPA属性中
<entry key="java.persistence.validation.factory" value-ref="validator" />
添加这些将使其使用Spring配置的实例。使UTF-8工作的一个选项是使用java类而不是属性文件
@Bean
public MessageSource validationMessageResource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("ValidationMessages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public Validator validator() {
return Validation.byDefaultProvider()
.configure()
.messageInterpolator(
new ResourceBundleMessageInterpolator(
new MessageSourceResourceBundleLocator(validationMessageResource())
)
)
.buildValidatorFactory()
.getValidator()
;
}
只需将ValidationMessages.java、ValidationMessages_fi.java等添加到您的src文件夹根目录
public class ValidationMessages extends ListResourceBundle {
@Override
protected Object[][] getContents() {
return new Object[][] {
{ "user.name", "Name is not valid" }
};
}
}你确定它没有使用“UTF-8”吗?你能在运行时调用messageSource.getDefaultEncoding()
并仔细检查吗?