Spring MVCではViewの動的生成にThymeleafを使うことが多いようです。サンプルでも使用されています。
しかし、このサンプルをいじってて日本語を入れてみたところ見事に文字化けしてしまいました。
解消するにはResolverにエンコーディング指定をしなければなりません。
サンプルで言うとWebConfig.javaの下記のメソッドです。
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
//NB, selecting HTML5 as the template mode.
resolver.setTemplateMode("HTML5");
resolver.setCacheable(false);
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
viewResolver.setViewNames(new String[]{"*"});
viewResolver.setCache(false);
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
この2つのメソッドの最後に
viewResolver.setCharacterEncoding("UTF-8");
という行を足しています。
これで文字化けが解消しました。
(追記)
Spring Bootのサンプルで同じようなことやってみると文字化け起きないですね。
spring-boot-starter-thymeleafだと標準でUTF-8なんでしょうか?


コメント