要想自己定製HTTP訊息轉換器必須先知道SpringBoot預設是怎麼做HTTP訊息轉換的。
先來看我們平常工作中開發一個簡單的get請求:
那麼當前端請求我們的API的時候,我們是如何將網路傳輸的位元組流序列化成我們想要的物件呢?做完業務處理後又是如何返回資料呢?
在SpringBoot框架下,可以使用@RequestBody和@ResponseBody兩個註解,分別完成請求報文到物件和物件到響應報文的轉換,底層這種靈活的訊息轉換機制,就是Spring3.x中新引入的HttpMessageConverter即訊息轉換器機制。
開啟任何一個集成了Spring-web功能的SpringBoot專案,都可以找到這個HttpMessageConvert:
可以看到他是一個介面類,和他在一個包下面有很多實現類,感興趣的同學可以debug跟進去把這塊原始碼搞透,這個過程中大家還可以學習到很多關於序列化的知識。
在專案的啟動類Application.class上有一個@SpringBootApplication註解,點進去會看到他是一系列註解的包含,其中有一個@EnableAutoConfiguration註解,繼續點進去檢視:
發現引入了一個類:AutoConfigurationImportSelector類,繼續跟進去有一個方法selectImports():
到這一步相信大家就清晰了他是怎麼載入的了:
繼續走下去就知道如何載入訊息的預設convert,這裡就不和大家說答案,希望大家自己可以跟進去看看,收穫是不一樣的~
知道了訊息轉換器的原理以及SpringBoot中如何載入的,我們就知道如何去定製自己的訊息轉換器了,先實現自己的一個convert,繼承AbstractHttpMessageConverter:
然後定義一個WebConfig類繼承WebMvcConfigurer,把我們自定義的這個convert加進去:
實際工作中,大家可能很多時候並不需要自己去實現convert,用預設的訊息轉換器就可以了,除非大家有自己特殊的需求考慮,否則不建議非得自己去實現這個convert。
要想自己定製HTTP訊息轉換器必須先知道SpringBoot預設是怎麼做HTTP訊息轉換的。
先來看我們平常工作中開發一個簡單的get請求:
那麼當前端請求我們的API的時候,我們是如何將網路傳輸的位元組流序列化成我們想要的物件呢?做完業務處理後又是如何返回資料呢?
HttpMessageConverter在SpringBoot框架下,可以使用@RequestBody和@ResponseBody兩個註解,分別完成請求報文到物件和物件到響應報文的轉換,底層這種靈活的訊息轉換機制,就是Spring3.x中新引入的HttpMessageConverter即訊息轉換器機制。
開啟任何一個集成了Spring-web功能的SpringBoot專案,都可以找到這個HttpMessageConvert:
可以看到他是一個介面類,和他在一個包下面有很多實現類,感興趣的同學可以debug跟進去把這塊原始碼搞透,這個過程中大家還可以學習到很多關於序列化的知識。
原始碼解析:怎麼知道SpringBoot中的預設convert在專案的啟動類Application.class上有一個@SpringBootApplication註解,點進去會看到他是一系列註解的包含,其中有一個@EnableAutoConfiguration註解,繼續點進去檢視:
發現引入了一個類:AutoConfigurationImportSelector類,繼續跟進去有一個方法selectImports():
到這一步相信大家就清晰了他是怎麼載入的了:
繼續走下去就知道如何載入訊息的預設convert,這裡就不和大家說答案,希望大家自己可以跟進去看看,收穫是不一樣的~
定製自己的convert知道了訊息轉換器的原理以及SpringBoot中如何載入的,我們就知道如何去定製自己的訊息轉換器了,先實現自己的一個convert,繼承AbstractHttpMessageConverter:
然後定義一個WebConfig類繼承WebMvcConfigurer,把我們自定義的這個convert加進去:
實際工作中,大家可能很多時候並不需要自己去實現convert,用預設的訊息轉換器就可以了,除非大家有自己特殊的需求考慮,否則不建議非得自己去實現這個convert。