在springboot中添加自定义TemplateResolver

我们都知道springboot的模板文件默认是在 classpath:templates/ 下面并且以.html结尾,但当在生产环境中我们需要动态的修改或替换某些模板文件时这样就不满足了,

这时就需要自定义一个TemplateResolver来解析我们的模板文件了,具体实现如下:

 

方法一(推荐):

这种方式继承了之前默认的配置,如下这种设置只需把模板文件与可执行jar文件放于同一目录下的templates/下即可

复制代码
import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.thymeleaf.templateresolver.FileTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;

@Configuration
public class WebConfig {
    
    @Bean
    public TemplateResolver fileTemplateResolver(ThymeleafProperties properties) {
        FileTemplateResolver resolver = new FileTemplateResolver();
        resolver.setOrder(Ordered.HIGHEST_PRECEDENCE);
        resolver.setCacheable(properties.isCache());
        resolver.setSuffix(properties.getSuffix());
        if (properties.getEncoding() != null) {
            resolver.setCharacterEncoding(properties.getEncoding().name());
        }
        resolver.setTemplateMode(properties.getMode());
        resolver.setPrefix("./templates/");
        return resolver;
    }

}
复制代码

 

 

 

 

方法二:

如下这种设置只需要把模板文件与可执行jar文件位于同一目录即可。

复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;

@Configuration
public class WebConfig {

    @Bean
    public TemplateResolver fileTemplateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setPrefix("file:");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
//        resolver.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return resolver;
    }
}
复制代码

 

 

 

 测试:

复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping
public class TestController {

    @GetMapping("/download")
    public String getIndex() {
        return "test";
    }
}
复制代码

 

测试中使用相对目录./templates/test.htmlclasspath:/templates/test.html, 注意设置模本文件的内容不同。

在浏览器访问 http://localhost:8080/download 观察输出加载内容及顺序。

 

 

经测试:模版加载顺序是自定义优先

    

 

 

获取模板解析器

1
2
3
4
5
6
7
8
9
// 注入自定义的模板解析器
@Autowired
@Qualifier("fileTemplateResolver")
TemplateResolver fileTemplateResolver;
 
// 注入默认的模板解析器
@Autowired
@Qualifier("defaultTemplateResolver")
TemplateResolver defaultTemplateResolver;

 

posted @   cymin  阅读(7001)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示