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;
        }
    }
}

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

コメント

タイトルとURLをコピーしました