springboot2.x入門實戰案例學習 (thymeleaf、json、fileupload、globalConfig) :第三篇

1 總體介紹

本次實踐的內容是springboot集成其他技術的方式和步驟,本篇主要包括對前端模板thymeleaf、json字符串轉換、文件上傳、自定義異常和全局配置的集成

2 實踐步驟

使用springboot初始化器創建新模塊,取名爲integrate

在這裏插入圖片描述

勾選web模塊、thymeleaf模塊和數據庫相關模塊

在這裏插入圖片描述

在配置文件中對thymeleaf的所有配置相關都可以在ThymeleafProperties中找到,主要是通過@ConfigurationProperties註解完成映射的

在這裏插入圖片描述

此圖表示在配置文件中thymeleaf的所有配置選項

在這裏插入圖片描述

創建Person實體類

在這裏插入圖片描述

創建對應的Controller,設置模擬數據後返回ModelAndView對象,其中指定視圖模板名

在這裏插入圖片描述

thymeleaf默認會去templates目錄下尋找模板視圖,在該路徑下創建對應的html,其中th:格式是thymeleaf特有的

在這裏插入圖片描述

啓動服務,在瀏覽器中輸入地址即可看到模板渲染後的內容

在這裏插入圖片描述

在springboot中默認使用的是jackson進行json字符串的轉換,如果實體類中存在日期類型,則可以使用@JsonFormat指定需要顯示的格式

在這裏插入圖片描述

編寫對應的方法

在這裏插入圖片描述

在瀏覽器中訪問地址,可以看到springboot已經將對象轉換爲了json字符串,其中日期的格式和在實體類中指定的一樣

在這裏插入圖片描述

springboot支持市面上大多數的json工具,使用時只需要將自帶的jackson排除,然後引入對應json工具的依賴即可,下面的示例表示用gson代替jackson

在這裏插入圖片描述

使用gson時需要通過GsonHttpMessageConverter告訴gson如何將實體類映射爲json串,它並不支持@JsonFormat註解,比如將日期以指定的格式輸出,如下所示

在這裏插入圖片描述

重新訪問路徑,可以看到日期格式已經變爲了gson中自定義的格式了

在這裏插入圖片描述

在spirngboot中進行文件上傳很簡單,首先需要準備一個頁面,其中enctype要使用文件上傳專用的
在這裏插入圖片描述

編寫文件上傳的controller,將獲取到的文件保存在某個目錄中

在這裏插入圖片描述

啓動服務,訪問文件上傳頁面

在這裏插入圖片描述

選擇文件並上傳後可以看到服務器返回的保存文件的路徑

在這裏插入圖片描述

假設在文件上傳時出錯了,springboot會默認使用自帶的錯誤頁面和錯誤信息,用戶也可以自己配置自定義的錯誤信息和頁面,下面的方法上使用@ExceptionHandler註解的值表明它是負責處理當上傳文件的大小超過限制時應該顯示什麼錯誤信息和錯誤頁面

在這裏插入圖片描述

編寫對應的錯誤頁面

在這裏插入圖片描述

選擇一個大文件進行上傳,頁面就會顯示自定義的錯誤信息

在這裏插入圖片描述

@ControllerAdvice可以和多個註解配合使用,它的含義是@Controller和@Advice的合體,和@ModelAttribute註解一起使用意味着在其他類中可以獲取到該註解標註的值

在這裏插入圖片描述

編寫controller類,在測試方法中獲取model的值並打印出來

在這裏插入圖片描述

可以看到雖然在controller中沒有向model中設置值,但是在其執行之前@ModelAttribute註解標註的方法已經執行完畢並將返回值放入了model中,因此可以在controller方法中獲取到

在這裏插入圖片描述

springboot還支持在進行數據映射時爲對象指定別名,這樣可以更好的區分對象中有相同字段的實體,首先創建兩個實體類,其中都包含name字段
在這裏插入圖片描述

如果直接在方法中已參數的形式要求springboot對其映射,則springboot不知道將name屬性映射到哪個實體類中

在這裏插入圖片描述

解決辦法是通過@ModelAttribute爲每個對象指定一個別名

在這裏插入圖片描述

然後通過@InitBinder註解爲指定的實體創建前綴,這兩個方法時在@ControllerAdvice中定義的

在這裏插入圖片描述

3 總結

上面的內容中大部分都是SpirngMVC中自帶的功能,其中一小部分纔是springboot新增的內容,如果已經熟悉了spring中相關的註解,則理解spirngboot會非常簡單,畢竟springboot只是對spirng的一層封裝而已,其底層使用的還是spring原先的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章