Spring MVC + Spring Bootで日本語の内容をPOSTした際の文字化けを解消する

Spring Bootで建てたサーバーに対してThymeleafでフォームを作り、
そのフォームに対して日本語を入れて送信すると、
requestの中身から文字化けが起きてしまいます。

色々検索してみるとPOSTじゃなくGETに関する記事でこんなのを見つけました。
Get Parameter Encoding

これの一番上の回答がPOSTで役に立つため利用します。

とはいえ、web.xmlの設定のためSpring Bootでどうやって設定するかというと、
ここにある通りFilterRegistrationBeanを使います。

WebConfigに以下の記述を追加します。

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    //...

    @Bean
    public FilterRegistrationBean getFilterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new CharacterEncodingFilter());
        return filterRegistrationBean;
    }

    /**
     * リクエストのエンコーディングをUTF-8にします。
     */
    private static class CharacterEncodingFilter implements Filter {
        protected String encoding;
        public void init(FilterConfig filterConfig) throws ServletException {
            encoding = "UTF-8";
        }
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                             FilterChain filterChain) throws IOException, ServletException {

            HttpServletRequest request = (HttpServletRequest) servletRequest;
            request.setCharacterEncoding(encoding);
            filterChain.doFilter(servletRequest, servletResponse);
        }
        public void destroy() {
            encoding = null;
        }
    }
}

これで文字化けが解消しました。


投稿日

カテゴリー:

投稿者:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください