Spring Boot - в MySQL данные при отправке формой пишутся не в utf-8 (кракозябры)

246
02 февраля 2018, 19:31

Добрый день.

Есть простое CRUD приложение на Spring Boot.

В IDE все работает как надо, проблем нет.

Сгенерил WAR, задеплоил в TomCat - там тоже все работает, кроме кодировки при отправке данных из формы - пишутся кракозябры, т.е. вместо "тест" в базу уходит "ТеÑÑ". Гуглил, но увы...

В application.properties:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.data.jpa.repositories.enabled=true
spring.jpa.generate.ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.sqlScriptEncoding=UTF-8
spring.messages.encoding=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8

В pom.xml есть:

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

В web.xml есть:

    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

В Application.java есть:

@Bean
public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    characterEncodingFilter.setForceEncoding(true);
    characterEncodingFilter.setEncoding("UTF-8");
    registrationBean.setFilter(characterEncodingFilter);
    return registrationBean;
}

В .jsp присутствуют:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

и

<meta charset="utf-8">

Что еще я упустил?

Update: Урезанный работающий проект http://web-site.ru/Library.rar

Answer 1

Проблема заключалась в неправильном использовании CharacterEncodingFilter. Данный фильтр использовался в 2 местах одновременно:

  1. в файле web.xml
  2. регистрировался отдельным бином в java конфигурации

Необходимо удалить фильтр в файле web.xml, и после этого из браузера в приложение будут приходить запросы в нормальной кодировке.

READ ALSO
SELECT и выборка из другой таблицы

SELECT и выборка из другой таблицы

Довольно простой запрос, только мне ещё нужно получить дополнительное поле sub_count, которое берется при помощи COUNT(*) из другой таблицы

276
BackgroundWorker

BackgroundWorker

vkMessages

295
Admob banner Unity

Admob banner Unity

Можно ли проверить открытый ли сейчас баннер ? Необходимо скрыть баннер когда заходим в настройки, и открыть когда выходим из настроек, но когда...

256