Spring Boot MVC MessageSource defaultEncoding不起作用

时间:2017-11-07 22:20:55

标签: java spring spring-mvc spring-boot character-encoding

简单的Spring Boot Web应用程序。 配置片段:

    @Bean
    public MessageSource validationMessageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("ValidationMessages");
        messageSource.setDefaultEncoding("UTF-8");

        return messageSource;
    }

    @Bean
    public Validator validator() {
        LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
        localValidatorFactoryBean.setValidationMessageSource(validationMessageSource());
        return localValidatorFactoryBean;
    }

我将defaultEncoding设为UTF-8。我有ValidationMessages.properties文件,用UTF-8编码(我的IntelliJ说的是,notepad ++这样说)并且包含不同的字符。

我有一个简单的网页(使用Freemarker创建)。该页面上有一些静态的UTF-8文本,并且显示正确。

当我提交位于该页面上的表单时,我希望看到正确的错误消息,但是当验证失败时(JSR-303 / JSR-349验证)我可以看到类似于обовÑзкове поле. min 2, max 15 ÑимволÑв的那些' sa来自.properties的邮件,但邮件编码错误!

这是页面(简化:没有div,css,js等):

<#import "/spring.ftl" as spring/>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>ShareMyCar</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    </head>
    <body>
       <form action="/registration" method="POST">
           <@spring.formInput path="modelObj.name" />
           <@spring.showErrors "<br>"/>

           <input type="submit" class="btn btn-primary" value="Submit" />            
        </form>

    </body>
</html>

我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

Java会在本地化捆绑包上自动采用ISO-8859-1编码。

请参阅:https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load(java.io.InputStream)

要使其正常工作,请将文件另存为ISO-8859-1,或使用转义序列,例如\ u1234。