以下是 Spring Boot 集成 FreeMarker 模板引擎的完整实现方案:
一、环境准备与依赖配置
-
Maven 依赖
需添加spring-boot-starter-freemarker和 Web 基础依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> -
配置文件
在application.yml中配置模板路径与开发模式参数:spring: freemarker: template-loader-path: classpath:/templates/ cache: false # 开发时关闭缓存 charset: UTF-8 suffix: .ftl # 模板文件扩展名
二、核心实现步骤
-
模板文件存放
在resources/templates/下创建.ftl文件(如hello.ftl):<!DOCTYPE html> <html> <body> <h1>Hello ${userName}!</h1> </body> </html> -
控制器编写
使用@Controller注解(非@RestController)返回模板名称:@Controller public class DemoController { @GetMapping("/greet") public String greet(Model model) { model.addAttribute("userName", "FreeMarker"); return "hello"; // 对应模板文件名(无后缀) } }
三、高级配置与优化
-
静态资源处理
静态文件(CSS/JS)需放在resources/static/目录,模板中通过相对路径引用。 -
全局变量注入
通过配置类添加共享变量:@Configuration public class FreeMarkerConfig implements FreeMarkerConfigurer { @Override public void postProcessConfiguration(Configuration config) { config.setSharedVariable("appVersion", "1.0.0"); } } -
安全防护
防止 XSS 攻击需在模板中使用?html转义:${unsafeContent?html}
四、调试与问题排查
- 模板热更新:开发时保持
spring.freemarker.cache=false - 错误定位:开启详细日志
logging.level.org.springframework.web=DEBUG - 语法检查:使用 IDE 插件(如 FreeMarker IDE)验证模板语法
注意:若需生成非 HTML 内容(如 Word/PDF),可通过
StringTemplateLoader动态加载模板并输出字节流。
2131

被折叠的 条评论
为什么被折叠?



