Spring Boot, FreeMarker и кодировка Windows-1252

Приложение на Spring Boot, MVC и FreeMarker. Везде, где только можно, выставил кодировку UTF-8 - и в заголовке ftl, и в pom.xml, и сделал бин viewResolver - результат не меняется, получаю "?" вместо русских букв. С БД все нормально - оттуда получаю русские символы. Вот несколько частей моего конфига:

<#ftl encoding='UTF-8'>
<#macro page>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" charset="UTF-8"/>

Здесь настройка maven:

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                    <jvmArguments>-Dfile.encoding=UTF8</jvmArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>

Здесь viewResolver и его инжект:

@Bean
public FreeMarkerViewResolver viewResolver() {
    FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
    viewResolver.setContentType("text/html;charset=UTF-8");
    viewResolver.setPrefix("templates/");
    viewResolver.setSuffix(".ftl");
    return viewResolver;
}

 

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    registry.freeMarker();
    registry.viewResolver(viewResolver);
}

Результат один - я получаю страницу в кодировке Windows-1252. Операционная система - Mac OS.

В чем еще может быть проблема?


Ответы (2 шт):

Автор решения: Podushkoved

Можно еще добавить кодировку для MessageConverters в настройках WebMvcConfigurer:

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.forEach(converter -> {
            if (converter instanceof AbstractHttpMessageConverter) {
                ((AbstractHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
                if (converter instanceof StringHttpMessageConverter) {
                    ((StringHttpMessageConverter) converter).setWriteAcceptCharset(false);
                }
            } else if (converter instanceof FormHttpMessageConverter) {
                ((FormHttpMessageConverter) converter).setCharset(StandardCharsets.UTF_8);
                ((FormHttpMessageConverter) converter).setMultipartCharset(StandardCharsets.UTF_8);
            }
        });
    }
}
→ Ссылка
Автор решения: Podushkoved

В настройках maven нужно добавить кодировку и в плагинах к нему:

<properties>
    <project.java.version>1.8</project.java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>${project.java.version}</source>
                <target>${project.java.version}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

См. How to configure encoding in Maven?

→ Ссылка