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; } } }
これで文字化けが解消しました。
コメント