官术网_书友最值得收藏!

4.1 返回JSON數據

4.1.1 默認實現

JSON是目前主流的前后端數據傳輸方式,Spring MVC中使用消息轉換器HttpMessageConverter對JSON的轉換提供了很好的支持,在Spring Boot中更進一步,對相關配置做了更進一步的簡化。默認情況下,當開發者新創建一個Spring Boot項目后,添加Web依賴,代碼如下:

這個依賴中默認加入了jackson-databind作為JSON處理器,此時不需要添加額外的JSON處理器就能返回一段JSON了。創建一個Book實體類:

然后創建BookController,返回Book對象即可:

當然,如果需要頻繁地用到@ResponseBody注解,那么可以采用@RestController組合注解代替@Controller和@ResponseBody,代碼如下:

此時,在瀏覽器中輸入“http://localhost:8080/book”,即可看到返回了JSON數據,如圖4-1所示。

圖4-1

這是Spring Boot自帶的處理方式。如果采用這種方式,那么對于字段忽略、日期格式化等常見需求都可以通過注解來解決。

這是通過Spring中默認提供的MappingJackson2HttpMessageConverter來實現的,當然開發者在這里也可以根據實際需求自定義JSON轉換器。

4.1.2 自定義轉換器

常見的JSON處理器除了jackson-databind之外,還有Gson和fastjson,這里針對常見用法分別舉例。

1. 使用Gson

Gson是Google的一個開源JSON解析框架。使用Gson,需要先除去默認的jackson-databind,然后加入Gson依賴,代碼如下:

由于Spring Boot中默認提供了Gson的自動轉換類GsonHttpMessageConvertersConfiguration,因此Gson的依賴添加成功后,可以像使用jackson-databind那樣直接使用Gson。但是在Gson進行轉換時,如果想對日期數據進行格式化,那么還需要開發者自定義HttpMessageConverter。自定義HttpMessageConverter可以通過如下方式。

首先看GsonHttpMessageConvertersConfiguration中的一段源碼:

@ConditionalOnMissingBean注解表示當項目中沒有提供GsonHttpMessageConverter時才會使用默認的GsonHttpMessageConverter,所以開發者只需要提供一個GsonHttpMessageConverter即可,代碼如下:

代碼解釋:


? 開發者自己提供一個GsonHttpMessageConverter的實例。

? 設置Gson解析時日期的格式。

? 設置Gson解析時修飾符為protected的字段被過濾掉。

? 創建Gson對象放入GsonHttpMessageConverter的實例中并返回converter。


此時,將Book類中的price字段的修飾符改為protected,代碼如下:

最后,在瀏覽器中輸入“http://localhost:8080/book”,即可看到運行結果,如圖4-2所示。

圖4-2

2. 使用fastjson

fastjson是阿里巴巴的一個開源JSON解析框架,是目前JSON解析速度最快的開源框架,該框架也可以集成到Spring Boot中。不同于Gson,fastjson繼承完成之后并不能立馬使用,需要開發者提供相應的HttpMessageConverter后才能使用,集成fastjson的步驟如下。

首先除去jackson-databind依賴,引入fastjson依賴:

然后配置fastjson的HttpMessageConverter:

代碼解釋:


? 自定義MyFastJsonConfig,完成對FastJsonHttpMessageConverter Bean的提供。

? 第7~15行分別配置了JSON解析過程的一些細節,例如日期格式、數據編碼、是否在生成的JSON中輸出類名、是否輸出value為null的數據、生成的JSON格式化、空集合輸出[]而非null、空字符串輸出""而非null等基本配置。


MyFastJsonConfig配置完成后,還需要配置一下響應編碼,否則返回的JSON中文會亂碼,在application.properties中添加如下配置:

接下來提供BookController進行測試。BookController和上一小節一致,運行成功后,在瀏覽器中輸入“http://localhost:8080/book”,即可看到運行結果,如圖4-3所示。

圖4-3

對于FastJsonHttpMessageConverter的配置,除了上面這種方式之外,還有另一種方式。

在Spring Boot項目中,當開發者引入spring-boot-starter-web依賴之后,該依賴又依賴了spring-boot-autoconfigure,在這個自動化配置中,有一個WebMvcAutoConfiguration類提供了對Spring MVC最基本的配置,如果某一項自動化配置不滿足開發需求,開發者可以針對該項自定義配置,只需要實現WebMvcConfigurer接口即可(在Spring 5.0之前是通過繼承WebMvcConfigurerAdapter類來實現的),代碼如下:

代碼解釋:


? 自定義MyWebMvcConfig類并實現WebMvcConfigurer接口中的configureMessageConverters方法。

? 將自定義的FastJsonHttpMessageConverter加入converters中。

注意

如果使用了Gson,也可以采用這種方式配置,但是不推薦。因為當項目中沒有GsonHttpMessageConverter時,Spring Boot自己會提供一個GsonHttpMessageConverter,此時重寫configureMessageConverters方法,參數converters中已經有GsonHttpMessageConverter的實例了,需要替換已有的GsonHttpMessageConverter實例,操作比較麻煩,所以對于Gson,推薦直接提供GsonHttpMessageConverter。

主站蜘蛛池模板: 梅州市| 买车| 临邑县| 麟游县| 白玉县| 乌审旗| 雷州市| 南投县| 黄平县| 屯留县| 德庆县| 那曲县| 乐亭县| 开远市| 磴口县| 徐水县| 磐安县| 瑞丽市| 汝州市| 紫金县| 阳东县| 霍邱县| 仙居县| 土默特左旗| 绥德县| 辽中县| 静海县| 朔州市| 临潭县| 安塞县| 山西省| 辽源市| 灌南县| 原阳县| 罗定市| 靖江市| 海城市| 阳西县| 吉木乃县| 平塘县| 武邑县|