Java 读取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

如何更改验证消息的资源包?默认的是将我的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。

.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()
并仔细检查吗?