欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

HttpMessageConverter 概述

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

主要實(shí)現(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;
}

接口的實(shí)現(xiàn)類

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

1. FormHttpMessageConverter
    支持 MultiValueMap 類型, 并且 MediaType 類型是 "multipart/form-data", 從 InputStream 里面讀取數(shù)據(jù), 并通過&符號(hào)分割, 最后轉(zhuǎn)換成 MultiValueMap, 或 將 MultiValueMap轉(zhuǎn)換成 & 符號(hào)連接的字符串, 最后轉(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)換器, 在讀取的時(shí)候, 從 HttpBody 里面讀取對(duì)應(yīng)的數(shù)據(jù)流轉(zhuǎn)換成對(duì)應(yīng)對(duì)應(yīng), 輸出時(shí)通過 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 之間進(jìn)行數(shù)據(jù)轉(zhuǎn)換的 HttpMessageConverter
10. AbstractGenericHttpMessageConverter
    支持從 Json 與 Object 之間進(jìn)行數(shù)據(jù)轉(zhuǎn)換的 HttpMessageConverter (PS: 主要通過 JackSon 或 Gson)
11. GsonHttpMessageConverter
    支持 application/*++json 格式的數(shù)據(jù), 并通過 Gson, 將字符串轉(zhuǎn)換成對(duì)應(yīng)的數(shù)據(jù)
12. MappingJackson2XmlHttpMessageConverter
    支持 application/*++json/*+xml 格式的數(shù)據(jù), 并通過 JackSon, 將字符串轉(zhuǎn)換成對(duì)應(yīng)的數(shù)據(jù)

總結(jié)

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

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

相關(guān)文章

  • Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解

    Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡介

    java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡介

    本文給大家?guī)淼氖莏ava圖形界面的基礎(chǔ)知識(shí),簡單介紹了標(biāo)簽、按鈕和按鈕事件,十分的詳細(xì),有需要的小伙伴可以參考下。
    2015-06-06
  • http調(diào)用controller方法時(shí)openfeign執(zhí)行流程

    http調(diào)用controller方法時(shí)openfeign執(zhí)行流程

    這篇文章主要為大家介紹了http調(diào)用controller方法時(shí)openfeign執(zhí)行流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java中后臺(tái)線程實(shí)例解析

    Java中后臺(tái)線程實(shí)例解析

    這篇文章主要介紹了Java中后臺(tái)線程實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例

    SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,允許服務(wù)器主動(dòng)向客戶端推送信息,同時(shí)也能從客戶端接收信息,本文主要介紹了SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-08-08
  • Java?BigDecimal正確用法詳解

    Java?BigDecimal正確用法詳解

    Java在java.math包中提供的API類BigDecimal,用來對(duì)超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算。雙精度浮點(diǎn)型變量double可以處理16位有效數(shù),但在實(shí)際應(yīng)用中,可能需要對(duì)更大或者更小的數(shù)進(jìn)行運(yùn)算和處理
    2022-10-10
  • Spring Boot+Nginx實(shí)現(xiàn)大文件下載功能

    Spring Boot+Nginx實(shí)現(xiàn)大文件下載功能

    相信很多小伙伴,在日常開放中都會(huì)遇到大文件下載的情況,大文件下載方式也有很多,比如非常流行的分片下載、斷點(diǎn)下載;當(dāng)然也可以結(jié)合Nginx來實(shí)現(xiàn)大文件下載,在中小項(xiàng)目非常適合使用,這篇文章主要介紹了Spring Boot結(jié)合Nginx實(shí)現(xiàn)大文件下載,需要的朋友可以參考下
    2024-05-05
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之健身器材商城系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之健身器材商城系統(tǒng)的實(shí)現(xiàn)

    只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Jdbc+Servlet+Ajax+Fileupload+mysql實(shí)現(xiàn)健身器材商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-03-03
  • 詳細(xì)分析Java中String、StringBuffer、StringBuilder類的性能

    詳細(xì)分析Java中String、StringBuffer、StringBuilder類的性能

    在Java中,String類和StringBuffer類以及StringBuilder類都能用于創(chuàng)建字符串對(duì)象,而在分別操作這些對(duì)象時(shí)我們會(huì)發(fā)現(xiàn)JVM執(zhí)行它們的性能并不相同,下面我們就來詳細(xì)分析Java中String、StringBuffer、StringBuilder類的性能
    2016-05-05
  • spring boot 下支付寶的開箱既用環(huán)境

    spring boot 下支付寶的開箱既用環(huán)境

    這篇文章主要介紹了spring boot 下支付寶的開箱既用環(huán)境包括使用場(chǎng)景和使用技巧,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-10-10

最新評(píng)論