最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析

 更新時間:2023年09月11日 11:43:55   作者:愛吃魚的KK  
這篇文章主要為大家介紹了SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

HttpMessageConverter 概述

HttpMessageConverter 其實就是將 HttpServletRequest 中的數(shù)據(jù), 根據(jù) MediaType 轉(zhuǎn)換成指定格式的數(shù)據(jù), 比如我們常見的表單提交 或通過 Json字符串提交數(shù)據(jù)

主要實現(xiàn)接口

// 數(shù)據(jù)轉(zhuǎn)換器 -> 將數(shù)據(jù)轉(zhuǎn)換成 requests 或 response 中的數(shù)據(jù)
public interface HttpMessageConverter<T> {
    // 指定的 class 是否支持讀取(MediaType 指數(shù)據(jù)的格式)
    boolean canRead(Class<?> clazz, MediaType mediaType);
    // 傳入 class 與 MediaType -> 看 HttpMessageConverter 是否支持寫數(shù)據(jù)到數(shù)據(jù)流中
    boolean canWrite(Class<?> clazz, MediaType mediaType);
    // 返回 HttpMessageConverter 支持的 MediaType
    List<MediaType> getSupportedMediaTypes();
    // 從 HttpInputMessage 中讀取數(shù)據(jù)流, 并轉(zhuǎn)化成 T 這站類型
    T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;
    // 將 T 里面的數(shù)據(jù)信息寫入到 HttpOutputMessage 的數(shù)據(jù)流中
    void write(T t, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
}

接口的實現(xiàn)類

對于接口的實現(xiàn)類主要有如下幾類:

1. FormHttpMessageConverter
    支持 MultiValueMap 類型, 并且 MediaType 類型是 "multipart/form-data", 從 InputStream 里面讀取數(shù)據(jù), 并通過&符號分割, 最后轉(zhuǎn)換成 MultiValueMap, 或 將 MultiValueMap轉(zhuǎn)換成 & 符號連接的字符串, 最后轉(zhuǎn)換成字節(jié)流, 輸出到遠(yuǎn)端
2. BufferedImageHttpMessageConverter
    支持 BufferedImgae 的 HttpMessageConverter, 通過 ImageReader 將 HttpBody 里面的數(shù)據(jù)轉(zhuǎn)換成 BufferedImage, 或ImageWriter 將ImageReader 轉(zhuǎn)換成字節(jié)流輸出到 OutputMessage
3. StringHttpMessageConverter
    支持?jǐn)?shù)據(jù)是 String 類型的, 從 InputMessage 中讀取指定格式的 str, 或 將數(shù)據(jù)編碼成指定的格式輸出到 OutputMessage
4. SourceHttpMessageConverter
    支持 DOMSource, SAXSource, StAXSource, StreamSource, Source 類型的消息轉(zhuǎn)換器, 在讀取的時候, 從 HttpBody 里面讀取對應(yīng)的數(shù)據(jù)流轉(zhuǎn)換成對應(yīng)對應(yīng), 輸出時通過 TransformerFactory 轉(zhuǎn)換成指定格式輸出
5. ResourceHttpMessageConverter
    支持?jǐn)?shù)據(jù)類型是 Resource 的數(shù)據(jù), 從 HttpBody 中讀取數(shù)據(jù)流轉(zhuǎn)換成 InputStreamResource|ByteArrayResource, 或從 Resource 中讀取數(shù)據(jù)流, 輸出到遠(yuǎn)端
6. ProtobufHttpMessageConverter
    支持?jǐn)?shù)據(jù)類型是 com.google.protobuf.Message, 通過 com.google.protobuf.Message.Builder 將 HttpBody 中的數(shù)據(jù)流轉(zhuǎn)換成指定格式的 Message, 通過 ProtobufFormatter 將 com.google.protobuf.Message 轉(zhuǎn)換成字節(jié)流輸出到遠(yuǎn)端
7. ObjectToStringHttpMessageConverter
    支持 MediaType是 text/plain 類型, 從 InputMessage 讀取數(shù)據(jù)轉(zhuǎn)換成字符串, 通過 ConversionService 將字符串轉(zhuǎn)換成自定類型的 Object; 或?qū)?Obj 轉(zhuǎn)換成 String, 最后 將 String 轉(zhuǎn)換成數(shù)據(jù)流
8. ByteArrayHttpMessageConverter
    支持格式是 byte 類型, 從 InputMessage 中讀取指定長度的字節(jié)流, 或?qū)?OutputMessage 轉(zhuǎn)換成字節(jié)流
9. AbstractXmlHttpMessageConverter及其子類
    支持從 xml 與 Object 之間進行數(shù)據(jù)轉(zhuǎn)換的 HttpMessageConverter
10. AbstractGenericHttpMessageConverter
    支持從 Json 與 Object 之間進行數(shù)據(jù)轉(zhuǎn)換的 HttpMessageConverter (PS: 主要通過 JackSon 或 Gson)
11. GsonHttpMessageConverter
    支持 application/*++json 格式的數(shù)據(jù), 并通過 Gson, 將字符串轉(zhuǎn)換成對應(yīng)的數(shù)據(jù)
12. MappingJackson2XmlHttpMessageConverter
    支持 application/*++json/*+xml 格式的數(shù)據(jù), 并通過 JackSon, 將字符串轉(zhuǎn)換成對應(yīng)的數(shù)據(jù)

總結(jié)

HttpMessageConverter 在整個 SpringMVC 中起著根據(jù) MediaType 類型將 HttpServletRequest 中的數(shù)據(jù)轉(zhuǎn)換成 指定對象的轉(zhuǎn)換器, 或?qū)ο筠D(zhuǎn)換成指定格式的數(shù)據(jù)(PS: byte/String/xml/json 等); 在其整體設(shè)計上與 HandlerMethodArgumentResolver 相似!

以上就是SpringMVC4.3 HttpMessageConverter源碼分析的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC HttpMessageConverter的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中Lombok的@Builder注解注意事項

    Java中Lombok的@Builder注解注意事項

    這篇文章主要介紹了Java中Lombok的@Builder注解注意事項,使用Lombok也會造成很多問題,尤其@Builder 有個很大的坑,已經(jīng)見過好幾次由于使用@Builder注解導(dǎo)致默認(rèn)值失效的問題,如果測試時沒有在意這個問題,就很容易引發(fā)線上問題,需要的朋友可以參考下
    2023-12-12
  • Java數(shù)組進階操作方法的核心技巧

    Java數(shù)組進階操作方法的核心技巧

    數(shù)組作為一種容器,我認(rèn)為是存放同一類型元素的無序排列的集合,在編寫程序的過程中數(shù)組的使用是不可或缺的,這篇文章主要介紹了Java數(shù)組進階操作方法的核心技巧,需要的朋友可以參考下
    2026-03-03
  • Java編程中使用throw關(guān)鍵字拋出異常的用法簡介

    Java編程中使用throw關(guān)鍵字拋出異常的用法簡介

    這篇文章主要介紹了Java編程中使用throw關(guān)鍵字拋出異常的用法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • Java InputStream的多種使用詳解

    Java InputStream的多種使用詳解

    這篇文章主要介紹了Java InputStream的多種使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • JAVA調(diào)用SAP WEBSERVICE服務(wù)實現(xiàn)流程圖解

    JAVA調(diào)用SAP WEBSERVICE服務(wù)實現(xiàn)流程圖解

    這篇文章主要介紹了JAVA調(diào)用SAP WEBSERVICE服務(wù)實現(xiàn)流程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 使用Jenkins配置Git+Maven的自動化構(gòu)建的方法

    使用Jenkins配置Git+Maven的自動化構(gòu)建的方法

    這篇文章主要介紹了使用Jenkins配置Git+Maven的自動化構(gòu)建的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 圖解Java經(jīng)典算法快速排序的原理與實現(xiàn)

    圖解Java經(jīng)典算法快速排序的原理與實現(xiàn)

    快速排序是基于二分的思想,對冒泡排序的一種改進。主要思想是確立一個基數(shù),將小于基數(shù)的數(shù)放到基數(shù)左邊,大于基數(shù)的數(shù)字放到基數(shù)的右邊,然后在對這兩部分進一步排序,從而實現(xiàn)對數(shù)組的排序
    2022-09-09
  • java解析.yml文件方式

    java解析.yml文件方式

    這篇文章主要介紹了java解析.yml文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java實現(xiàn)在線預(yù)覽的示例代碼(openOffice實現(xiàn))

    Java實現(xiàn)在線預(yù)覽的示例代碼(openOffice實現(xiàn))

    本篇文章主要介紹了Java實現(xiàn)在線預(yù)覽的示例代碼(openOffice實現(xiàn)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 結(jié)合Mybatis聊聊對SQL注入的見解

    結(jié)合Mybatis聊聊對SQL注入的見解

    這篇文章主要介紹了結(jié)合Mybatis聊聊對SQL注入的見解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

苏尼特左旗| 湘乡市| 门源| 临潭县| 衡阳县| 延安市| 大城县| 二连浩特市| 双柏县| 崇文区| 景宁| 鄂温| 浮山县| 大城县| 英吉沙县| 高安市| 宾阳县| 钦州市| 平原县| 宁波市| 唐山市| 察雅县| 甘泉县| 柳州市| 沁源县| 陆良县| 台州市| 赤峰市| 遂溪县| 通化市| 涪陵区| 灌南县| 天水市| 阳东县| 津南区| 商丘市| 吉木萨尔县| 南木林县| 威远县| 通辽市| 新乡县|