@MaxLich
java developer

Почему у меня кириллица из HTML-формы приходит в программу в виде кракозябров?

Здравствуйте.
Делаю пет-проект в виде CRUD-веб-приложения - англо-русский словарь.
На беке - джава.
На фронте чистый хтмл, сформированный freemarker.
Применяю Spring mvc.
Ввожу в форму данные - текст на русском, проверяю, что приходит на контроллер, а там кракозябры всякие.
Вот скриншот.
5b86ef7ae9ca2956421663.png

Вот что в ИДЕИ отображается во время дебага. Брейкпоинт стоит как раз на контроллере, который перехватывает этот запрос.
5b86f0daf2c5b783183013.png

Все страницы у меня на utf-8. Дополнительно это ставил в конфигурации спринга:
@Bean
    public ViewResolver getViewResolver() {
        FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver();
        freeMarkerViewResolver.setOrder(1);
        freeMarkerViewResolver.setPrefix("");
        freeMarkerViewResolver.setSuffix(".ftl");
        freeMarkerViewResolver.setContentType("text/html; charset=UTF-8");
        return freeMarkerViewResolver;
    }

    @Bean
    public FreeMarkerConfigurer getFreeMarkerConfigurer() {
        FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
        freeMarkerConfigurer.setTemplateLoaderPaths("/", "/WEB-INF/views/");
        freeMarkerConfigurer.setDefaultEncoding("UTF-8");
        return freeMarkerConfigurer;
    }


Сама страница, откуда отправляю данные:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Добавление нового слова</title>
</head>
<body>

<h1>Добавление нового слова</h1>
<form name="record" action="/my-web-dictionary/dictionary-add-word/" method="post" accept-charset="UTF-8">
    Слово:<br>
    <input title="Слово" type="text" name="word" style="width: 418px;"><br>
    Значение:<br>
    <textarea title="Значение слова" rows="10" cols="50" name="definition"></textarea><br>
    <input type="submit" value="OK">
</form>

<br>
<a href="/my-web-dictionary/">Back</a>

</body>
</html>
  • Вопрос задан
  • 3364 просмотра
Решения вопроса 1
@MaxLich Автор вопроса
java developer
Помог комментарий Moskus . Нужно было добавить код в WebAppInitializer. В итоге этот класс выглядит так:
public class WebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(SpringConfig.class, WebConfig.class);
        context.setServletContext(servletContext);

        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);

        FilterRegistration.Dynamic filterRegistration = servletContext
                .addFilter("characterEncodingFilter", characterEncodingFilter);
        filterRegistration.addMappingForUrlPatterns(null, false, "/*");
    }
}


Добавил следующий кусок:
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);

        FilterRegistration.Dynamic filterRegistration = servletContext
                .addFilter("characterEncodingFilter", characterEncodingFilter);
        filterRegistration.addMappingForUrlPatterns(null, false, "/*");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы