Thymeleaf中文乱码问题,热部署问题

发布时间 2024-01-07 00:12:51作者: 磁力搜索专家

跟着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();
    }
}