读取以utf-8编码的ValidationMessages

时间:2015-10-30 14:15:36

标签: 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 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.

3 个答案:

答案 0 :(得分:3)

.properties文件是按ISO-8859-1编码(又名Latin-1)读取的每个规范。(请参阅https://en.wikipedia.org/wiki/.propertiesHow to use UTF-8 in resource properties with ResourceBundle)。因此,您需要指定unicode字符而不是将文件保存为UTF-8

要将LocalValidatorFactoryBean与Hibernate一起使用,您需要将其连接到JPA,否则它将使用默认值。

将以下属性添加到LocalContainerEntityManagerFactoryBean

的JPA属性中
<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" } 
    };
}

}