Spring Boot (Web 篇):整合Fastjson
目錄
2)對FastJsonHttpMessageConverter進行修改
說在前面
Fastjson是一個Java庫,可用於將Java物件轉換為其JSON表示。它還可用於將JSON字串轉換為等效的Java物件。Fastjson可以處理任意Java物件,包括您沒有原始碼的預先存在的物件。
Fastjson目標
- 在伺服器端和Android客戶端提供最佳效能
- 提供簡單的toJSONString()和parseObject()方法,將Java物件轉換為JSON,反之亦然
- 允許將預先存在的不可修改物件轉換為JSON和從JSON轉換
- 廣泛支援Java Generics
- 允許物件的自定義表示
- 支援任意複雜的物件(具有深層繼承層次結構和泛型型別的廣泛使用)
在pom.xml加入相關依賴
整合 Fastjson
配置管理類WebMvcConfigurer
程式設計式配置
如果是使用程式設計的方式(通常是基於 Spring Boot 專案)配置 Spring MVC 的話只需繼承 WebMvcConfigurerAdapter
覆寫 configureMessageConverters
方法即可,就像下面這樣。
注:如果你使用的 Fastjson 版本小於1.2.36
的話(強烈建議使用最新版本),在與Spring MVC 4.X 版本整合時需使用 FastJsonHttpMessageConverter4
注2:SpringBoot 2.0.1版本中載入WebMvcConfigurer
的順序發生了變動,故需使用converters.add(0, converter);
指定FastJsonHttpMessageConverter
在converters內的順序,否則在SpringBoot 2.0.1及之後的版本中將優先使用Jackson處理。詳情:WebMvcConfigurer is overridden by WebMvcAutoConfiguration #12389
參考:Spring Framework 官方文件 Message Converters 部分, 點我檢視。
實體類Customer
此處採用 lombok 方式,@Data註解:註解在類上使用,提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
控制器類IndexController
務必 加上 @ResponseBody,亦或者直接在 Controller 上採用 @RestController註解
@ResponseBody
@Responsebody 註解表示該方法的返回的結果直接寫入 HTTP 響應正文(ResponseBody)中,一般在非同步獲取資料時使用,通常是在使用 @RequestMapping 後,返回值通常解析為跳轉路徑,加上 @Responsebody 後返回結果不會被解析為跳轉路徑,而是直接寫入HTTP 響應正文中。
作用:
該註解用於將Controller的方法返回的物件,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response物件的body資料區。
使用時機:
返回的資料不是html標籤的頁面,而是其他某種格式的資料時(如json、xml等)使用;
頁面訪問
在瀏覽器直接輸入:http://localhost:8080/index/helloFastJson
注
其中處理編碼問題這裡提供兩種方式
預設如果不處理,會顯示:
1)對FastJsonConfig進行修改
看一下原始碼,預設為 UTF-8:
在配置管理類中WebMvcConfig中configureMessageConverters方法 配置 FastJsonConfig
此時返回頁面json中 中文依然存在亂碼,需要配置 application.properties
把 spring.http.encoding.force 改為 true
可以看到他的原始碼是 Boolean,也就是預設值為 false,所以開啟這個就ok了。
2)對FastJsonHttpMessageConverter進行修改
兩種方式處理完,處理結果為:
當然,個人建議採用一種,只需要修改application.properties配置即可,因為預設就是UTF-8。
其中處理日期(時間)問題這裡提供兩種方式
預設如果不處理,會顯示:
1)對FastJsonConfig進行修改
結果為:
2)對Customer實體類進行修改
這裡採用註解形式
結果為:
同樣,根據需求不同選擇不同,第一種是全域性,第二種為單獨處理。
當然,如果同時寫入,FastJsonConfig > @JSONField
至此為止,SpringBoot整合FastJson就算完成了。
總結
如果你使用 Spring MVC 來構建 Web 應用並對效能有較高的要求的話,可以使用 Fastjson 提供的FastJsonHttpMessageConverter
來替換 Spring MVC 預設的 HttpMessageConverter
以提高 @RestController @ResponseBody @RequestBody
註解的 JSON序列化速度。下面是配置方式,非常簡單。
原始碼下載
[相關示例完整程式碼]請獲取 相關分支哦:feature-20180910-web