09_Spring Boot 整合 Freemarker 模板引擎的坑
1.背景:
springboot 版本:3.0.2
2. 引入依賴
在 pom.xml
中添加:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!-- Spring Boot Freemarker 依賴 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
3. 配置 freemarker
application.yml
中進行如下配置
spring:freemarker:cache: falsecharset: UTF-8check-template-location: truecontent-type: text/htmlexpose-request-attributes: trueexpose-session-attributes: truerequest-context-attribute: request
4. 編寫控制層代碼
- 需要使用
@Controller
,而非@RestController
。 @Controller
用于返回視圖頁面,@RestController
會默認返回 JSON,不適合頁面跳轉。
示例:
@Controller
public class FreemarkerController {@GetMapping("/freemarker")public String freemarkerTest(Model model) {model.addAttribute("message", "Hello Freemarker!");return "freemarker"; // 視圖名稱,對應模板文件}
}
5. 模板文件位置與命名
- Freemarker模板文件放置于
src/main/resources/templates/
目錄。 - 即模板文件命名為
freemarker.ftl
。
目錄結構示例:
src└─ main└─ resources└─ templates└─ freemarker.ftl
freemarker.ftl
模板內容如下:
<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title>Freemarker</title>
</head>
<body>
</body>
</html>
6. 啟動項目
啟動后訪問地址,并沒有想象中的順利,直接報錯了。
第一次報錯:404 錯誤
- 可能是緩存或項目未正確構建導致。
- 解決:執行 Maven
clean
,重新編譯打包,再啟動。
第二次報錯:還是 404 錯誤
經過查詢才知道,Spring Boot 2.2.0 起,默認模版后綴名為 ftlh
。
解決方案:
- 將模板文件后綴由
.ftl
改為.ftlh
。 - 確認模板文件路徑和名稱與返回視圖名一致。
例如:
templates/freemarker.ftlh
控制器返回:
return "freemarker"; // 自動匹配 freemarker.ftlh
templates/freemarker.ftlh
控制器返回:
return "freemarker"; // 自動匹配 freemarker.ftlh
Spring Boot 2.2.0 及以上版本 Freemarker 模板后綴名默認是 .ftlh
,而不是傳統的 .ftl
。