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


コメント