1. 程式人生 > >Spring Boot (Web 篇):整合Fastjson

Spring Boot (Web 篇):整合Fastjson

目錄

說在前面

Fastjson目標

在pom.xml加入相關依賴

整合 Fastjson

配置管理類WebMvcConfigurer

程式設計式配置

實體類Customer

控制器類IndexController

@ResponseBody

頁面訪問

其中處理編碼問題這裡提供兩種方式

1)對FastJsonConfig進行修改

2)對FastJsonHttpMessageConverter進行修改

其中處理日期(時間)問題這裡提供兩種方式

1)對FastJsonConfig進行修改

2)對Customer實體類進行修改

總結

原始碼下載


說在前面

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