跟着Spring in action这本书使用java配置方式搭Thymeleaf环境遇到中文乱码问题。在web.xml和WebConfig.java中设置编码格式都不能解决。最后使用了如下方面成功解决了:
在ViewResolver中.setCharacterEncoding("UTF-8");
在TemplateResolver中.setCharacterEncoding("UTF-8");
修改html页面后需要重新启动服务器才能看到修改界面,但是开发中不可能这么做。可以将Thymeleaf的cache关闭:
在TemplateResolver中`templateResolver.setCacheable(false);
最后附完整的WebConfig
package me.zji.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.thymeleaf.spring3.SpringTemplateEngine; import org.thymeleaf.spring3.view.ThymeleafViewResolver; import org.thymeleaf.templateresolver.ServletContextTemplateResolver; import org.thymeleaf.templateresolver.TemplateResolver; /** * SpringMVC 主配置 * Created by imyu on 2017/1/20. */ @Configuration @EnableWebMvc @ComponentScan("me.zji.web") public class WebConfig extends WebMvcConfigurerAdapter { // Thymeleaf视图解析器 @Bean public ViewResolver viewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine); viewResolver.setCharacterEncoding("UTF-8");// 解决Thymeleaf中文乱码问题 return viewResolver; } // 模板引擎 @Bean public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver); return templateEngine; } // 模板解析器 @Bean public TemplateResolver templateResolver() { TemplateResolver templateResolver = new ServletContextTemplateResolver(); templateResolver.setPrefix("/WEB-INF/templates/"); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode("HTML5"); templateResolver.setCacheable(false);// 修改html后不用重启动 templateResolver.setCharacterEncoding("UTF-8");// 解决Thymeleaf中文乱码问题 return templateResolver; } // 配置静态资源的处理 @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }