SpringBoot項目中如何定制HTTP消息轉換器?
要想自己定制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():
繼續點擊進入loadMetadata這個方法:
到這一步相信大家就清晰了他是怎么加載的了:
繼續走下去就知道如何加載消息的默認convert,這里就不和大家說答案,希望大家自己可以跟進去看看,收獲是不一樣的~
定制自己的convert知道了消息轉換器的原理以及SpringBoot中如何加載的,我們就知道如何去定制自己的消息轉換器了,先實現自己的一個convert,繼承AbstractHttpMessageConverter:
然后定義一個WebConfig類繼承WebMvcConfigurer,把我們自定義的這個convert加進去:
實際工作中,大家可能很多時候并不需要自己去實現convert,用默認的消息轉換器就可以了,除非大家有自己特殊的需求考慮,否則不建議非得自己去實現這個convert。
以上就是關于SpringBoot中如何定制消息轉換器的回答了,不足之處歡迎大家評論交流,共同學習。
我是【java架構設計】,如果我的回答對您有幫助,歡迎轉發點贊,我將持續為您提供Java領域優質內容!