當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot消息转换器:HttpMessageConverter
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot消息转换器:HttpMessageConverter
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 消息轉化器的作用
- 消息轉化器的主要方法
- 默認配置的消息轉化器
- 注意事項
在整個數(shù)據(jù)流轉過程中,前端的請求報文轉化為Java對象,Java對象轉化為響應報文,這里就用到了HttpMessageConverter(消息轉換器)。
消息轉化器的作用
消息轉化器的主要方法
- getSupportedMediaTypes:獲取支持的MediaType集合(如:text/html,text/plain,application/json)
- canRead:判斷是否能讀(請求)
- read:將請求數(shù)據(jù)進行格式轉換(canRead方法返回值為true時調用)
- canWrite:判斷是否能寫(響應)
- write:將響應數(shù)據(jù)進行格式轉換(canWrite方法返回值為true時調用)
默認配置的消息轉化器
SpringMVC啟動時會自動配置一些HttpMessageConverter(WebMvcConfigurationSupport類的addDefaultHttpMessageConverters)方法
源碼如下:
protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) {messageConverters.add(new ByteArrayHttpMessageConverter());messageConverters.add(new StringHttpMessageConverter());messageConverters.add(new ResourceHttpMessageConverter());messageConverters.add(new ResourceRegionHttpMessageConverter());try {messageConverters.add(new SourceHttpMessageConverter<>());}catch (Throwable ex) {// Ignore when no TransformerFactory implementation is available...}messageConverters.add(new AllEncompassingFormHttpMessageConverter());if (romePresent) {messageConverters.add(new AtomFeedHttpMessageConverter());messageConverters.add(new RssChannelHttpMessageConverter());}if (jackson2XmlPresent) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));}else if (jaxb2Present) {messageConverters.add(new Jaxb2RootElementHttpMessageConverter());}if (jackson2Present) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build()));}else if (gsonPresent) {messageConverters.add(new GsonHttpMessageConverter());}else if (jsonbPresent) {messageConverters.add(new JsonbHttpMessageConverter());}if (jackson2SmilePresent) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.smile();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2SmileHttpMessageConverter(builder.build()));}if (jackson2CborPresent) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.cbor();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2CborHttpMessageConverter(builder.build()));}}部分消息轉換器解析
| MappingJackson2HttpMessageConverter | 負責讀、寫JSON格式數(shù)據(jù)(利用Jackson) |
| AllEncompassingFormHttpMessageConverter | 負責讀、寫Form表單數(shù)據(jù) |
| Jaxb2RootElementHttpMessageConverter | 負責讀、寫XML格式數(shù)據(jù)(使用JAXB) |
| ByteArrayHttpMessageConverter | 負責讀、寫二進制格式數(shù)據(jù) |
| StringHttpMessageConverter | 負責讀、寫字符串格式數(shù)據(jù) |
| ResourceHttpMessageConverter | 負責讀、寫資源文件數(shù)據(jù) |
| SourceHttpMessageConverter | 負責讀、寫資源數(shù)據(jù) |
注意事項
系統(tǒng)有默認配置的消息轉換器集合。
處理過程會按集合順序匹配合適的消息轉換器,如果有合適的,就會使用該消息轉換器處理(讀、寫),后續(xù)的消息轉換器不再執(zhí)行。
自定義的消息轉換器要想生效,必須放到集合中相同類型的消息轉換器前面,原因參考第二點。
思考:既然自定義的消息轉換器必須放到集合中相同類型的消息轉換器前面,那是否能直接改動集合中原有的消息轉換器來達到自定義的效果,而不必在加一個(暫未沒研究)。
添加自定義消息轉換器時注意默認消息轉換器是否生效
總結
以上是生活随笔為你收集整理的SpringBoot消息转换器:HttpMessageConverter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ★ VC 驿站 ★
- 下一篇: initializationError报