如何更改验证消息的资源包?默认的是将我的ValidationMessages.properties读作ISO-8859-1(我猜),但它是UTF-8。我试过这个:
@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.
答案 0 :(得分:3)
.properties
文件是按ISO-8859-1
编码(又名Latin-1
)读取的每个规范。(请参阅https://en.wikipedia.org/wiki/.properties和How to use UTF-8 in resource properties with ResourceBundle)。因此,您需要指定unicode字符而不是将文件保存为UTF-8
。
要将LocalValidatorFactoryBean
与Hibernate一起使用,您需要将其连接到JPA,否则它将使用默认值。
将以下属性添加到LocalContainerEntityManagerFactoryBean
。
<entry key="java.persistence.validation.factory" value-ref="validator" />
添加它将使其使用Spring Configured实例。
答案 1 :(得分:0)
@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()
;
}
答案 2 :(得分:0)
使UTF-8起作用的一种方法是使用Java类而不是属性文件。
只需将ValidationsMessages.java,ValidationMessages_fi.java等添加到您的src文件夹根目录中即可。
public class ValidationMessages extends ListResourceBundle {
@Override
protected Object[][] getContents() {
return new Object[][] {
{ "user.name", "Name is not valid" }
};
}
}