09_Spring Boot 整合 Freemarker 模板引擎的坑

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90118.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十七、【Linux系統yum倉庫管理】替換阿里源、搭建本地yum源

替換阿里源、搭建本地yum源本章學習目標內容簡介阿里外網源核心功能本地yum核心功能操作演示替換阿里外網源備份原有yum源清理沖突配置下載阿里源配置文件添加EPEL擴展源清理緩存重建索引驗證源狀態測試安裝軟件使用鏡像搭建本地倉庫準備ISO鏡像創建掛載點目錄掛載iso文件驗證掛…

家庭網絡怎么進行公網IP獲取,及內網端口映射外網訪問配置,附無公網IP提供互聯網連接方案

在家庭網絡中&#xff0c;我們常常需要通過公網IP來訪問內網中的設備&#xff0c;比如家庭NAS、Web服務器或監控攝像頭。要實現這個目標&#xff0c;首先要確保你的網絡具有一個可用的公網IP&#xff0c;然后通過路由器配置端口映射&#xff08;Port Forwarding&#xff09;。如…

(LeetCode 面試經典 150 題 ) 128. 最長連續序列 (哈希表)

題目&#xff1a;128. 最長連續序列 思路&#xff1a;哈希表&#xff0c;時間復雜度0(n)。 用集合set來實現哈希表的功能&#xff0c;記錄所有出現的元素。然后遍歷元素&#xff0c;細節看注釋。 C版本&#xff1a; class Solution { public:int longestConsecutive(vector&…

Altera Quartus:BAT批處理實現一鍵sof文件轉換為jic文件

sof文件是Quartus編譯默認生成的程序文件&#xff0c;用于通過JTAG口下載到FPGA內部RAM&#xff0c;斷電程序會丟失&#xff0c;jic文件是用于固化到外部Flash中的程序文件&#xff0c;斷電程序不會丟失。本文介紹如何通過批處理文件實現sof到jic的一鍵自動化轉換。 Quartus工程…

基于單片機嬰兒床/嬰兒搖籃/嬰兒車設計/嬰兒監護系統

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 本設計實現了一種基于單片機的多功能智能嬰兒監護系統&#xff0c;集成于嬰兒床、搖籃或嬰兒車中…

Typora + 七牛云圖床終極配置教程

本文是一份超詳細的 Typora 七牛云圖床配置指南&#xff0c;旨在幫助你實現圖片“即插即用”的順滑寫作體驗。我們將一步步完成所有配置&#xff0c;并特別針對配置過程中最常見的三個錯誤&#xff1a;ENOTFOUND (找不到服務器)、401 (無權訪問) 和 Document not found (文件不…

高性能熔斷限流實現:Spring Cloud Gateway 在電商系統的實戰優化

一、為什么需要高性能熔斷限流&#xff1f; 在電商系統中&#xff0c;尤其是大促期間&#xff0c;系統面臨的流量可能是平時的數十倍甚至上百倍。 這樣的場景下&#xff0c;熔斷限流不再是可選功能&#xff0c;而是保障系統穩定的生命線。傳統方案的問題&#xff1a; 限流精度不…

計算機網絡1.1:計算機網絡在信息時代的作用

計算機網絡已由一種通信基礎設施發展成為一種重要的信息服務基礎設施。計算機網絡已經像水、電、煤氣這些基礎設施一樣&#xff0c;成為我們生活中不可或缺的一部分。

Component cannot be used as a JSX component

今天在使用 React Ts&#xff0c;使用 react-icons 這個庫的時候&#xff0c;遇到了這個問題&#xff1a;原因用一句話概括就是 Ts 的版本太低了&#xff01; 我的 package.json&#xff1a; {"name": "frontend","version": "0.1.0"…

Centos安裝最新docker以及ubuntu安裝docker

Centos安裝最新版本docker1.更新阿里源,更新之前先做備份mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup更新阿里源wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo2.運行 yum makecache 生成緩存…

網絡基礎15-16:MSTP +VRRP綜合實驗

MSTP 、VRRP綜合實驗&#xff0c;MSTP涵蓋根橋選舉、邊緣端口、BPDU 保護、根保護、TC 保護 等功能驗證。一、實驗拓撲與設備規劃核心層&#xff1a;LSW1&#xff08;VLAN10 根橋、VLAN20 備份根&#xff09;、LSW2&#xff08;VLAN20 根橋、VLAN10 備份根&#xff09;。接入層…

nvm安裝詳細教程、鏡像、環境變量(安裝node.js,npm,nvm)

一、什么是nodejs、nvm、npm 1、node.js 角色&#xff1a;JavaScript 的運行時環境&#xff08;runtime&#xff09;。 作用&#xff1a;讓 JavaScript 脫離瀏覽器&#xff0c;直接在服務器或本地運行&#xff08;比如用 node app.js 執行代碼&#xff09;。 包含&#xff1…

【JS】獲取元素寬高(例如div)

文章目錄基礎用法基礎用法 高度類型選擇&#xff08;寬度同理&#xff09;&#xff1a; 屬性描述offsetHeight包含邊框內邊距內容clientHeight包含內邊距內容&#xff08;不包含邊框&#xff09;scrollHeight包含滾動內容的全高&#xff08;含隱藏部分&#xff09; JS可使用g…

Kubernetes(k8s)中命令行查看Pod所屬控制器之方法總結

在Kubernetes中&#xff0c;可以通過以下方法查看Pod所屬的控制器&#xff1a;方法1&#xff1a;使用 kubectl describe pod命令kubectl describe pod <pod name>Events:Type Reason Age From Message---- ------ ---- ---- …

Zabbix 企業級高級應用

目錄 一、Zabbix 監控基礎與核心價值 二、網絡自動發現&#xff1a;批量主機自動化管理 &#xff08;一&#xff09;網絡自動發現的核心能力與局限 &#xff08;二&#xff09;網絡自動發現完整流程 &#xff08;三&#xff09;網絡自動發現配置步驟 1. 客戶端&#xff0…

行業分類表sql

1.創建行業表行業信息表(hy_industries)名類型長度小數點Not Null虛擬鍵默認值注釋industries_idintTRUEFALSETRUE行業IDindustry_codevarchar5FALSEFALSEFALSE行業編碼industry_namevarchar100FALSEFALSEFALSE行業名稱parent_idvarchar50FALSEFALSEFALSE父級行業ID(頂級為NULL…

PPIO × Lemon AI:一鍵解鎖全流程自動化開發能力

傳統開發需手動編寫代碼、調試及測試&#xff0c;耗時且依賴技術能力。AI Agent 可以幫助開發者進行高效開發&#xff0c;從需求理解到代碼生成、測試、部署一站式完成。Lemon AI是一款開源的通用智能體&#xff0c;能夠實現從需求計劃到成果交付全流程自動化。它可以在虛擬環境…

基于單片機無線防丟/兒童防丟報警器

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 本設計實現了一種基于單片機的無線防丟報警系統&#xff0c;主要用于防止貴重物品&#xff08;如…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | NotesApp(便簽筆記組件)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— NotesApp組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/。 使用 Vue 3 的 Composition API 搭配 TailwindCSS 和 marked 庫&…

基于JAVA實現基于“obj--html--pdf” 的PDF格式文本生成

背景&#xff1a;因一個特定的項目需要&#xff0c;將java對象內容以特定樣式的PDF格式輸出&#xff0c;查看了很多文檔&#xff0c;有收費的、免費的、基礎集成的。收費的工具就表現突出&#xff0c;免費的工具基本很難滿足需求&#xff0c;故著手采用基礎集成方案。過程中嘗試…