HTTP 訊息轉換

spring-web 模組包含 HttpMessageConverter 介面,用於透過 InputStreamOutputStream 讀取和寫入 HTTP 請求和響應的正文。HttpMessageConverter 例項在客戶端(例如,在 RestClient 中)和伺服器端(例如,在 Spring MVC REST 控制器中)使用。

框架中提供了主要媒體(MIME)型別的具體實現,並且預設情況下,它們在客戶端註冊到 RestClientRestTemplate,在伺服器端註冊到 RequestMappingHandlerAdapter(參見配置訊息轉換器)。

下面描述了 HttpMessageConverter 的幾種實現。有關完整列表,請參閱 HttpMessageConverter Javadoc。對於所有轉換器,都使用預設的媒體型別,但可以透過設定 supportedMediaTypes 屬性來覆蓋它。

表 1. HttpMessageConverter 實現
MessageConverter 描述

StringHttpMessageConverter

一個 HttpMessageConverter 實現,可以從 HTTP 請求和響應中讀取和寫入 String 例項。預設情況下,此轉換器支援所有文字媒體型別 (text/*),並使用 text/plainContent-Type 進行寫入。

FormHttpMessageConverter

一個 HttpMessageConverter 實現,可以從 HTTP 請求和響應中讀取和寫入表單資料。預設情況下,此轉換器讀取和寫入 application/x-www-form-urlencoded 媒體型別。表單資料從 MultiValueMap<String, String> 讀取並寫入其中。轉換器還可以寫入(但不能讀取)從 MultiValueMap<String, Object> 讀取的多部分資料。預設情況下,支援 multipart/form-data。可以支援額外的多部分子型別以寫入表單資料。有關更多詳細資訊,請查閱 FormHttpMessageConverter 的 Javadoc。

ByteArrayHttpMessageConverter

一個 HttpMessageConverter 實現,可以從 HTTP 請求和響應中讀取和寫入位元組陣列。預設情況下,此轉換器支援所有媒體型別 (*/*),並使用 application/octet-streamContent-Type 進行寫入。您可以透過設定 supportedMediaTypes 屬性並覆蓋 getContentType(byte[]) 來覆蓋此設定。

MarshallingHttpMessageConverter

一個 HttpMessageConverter 實現,可以使用 org.springframework.oxm 包中的 Spring 的 MarshallerUnmarshaller 抽象來讀取和寫入 XML。此轉換器在使用前需要一個 MarshallerUnmarshaller。您可以透過建構函式或 Bean 屬性注入它們。預設情況下,此轉換器支援 text/xmlapplication/xml

MappingJackson2HttpMessageConverter

一個 HttpMessageConverter 實現,可以使用 Jackson 的 ObjectMapper 讀取和寫入 JSON。您可以透過使用 Jackson 提供的註解根據需要自定義 JSON 對映。當您需要進一步控制(對於需要為特定型別提供自定義 JSON 序列化器/反序列化器的情況)時,您可以透過 ObjectMapper 屬性注入自定義 ObjectMapper。預設情況下,此轉換器支援 application/json。這需要 com.fasterxml.jackson.core:jackson-databind 依賴項。

MappingJackson2XmlHttpMessageConverter

一個 HttpMessageConverter 實現,可以使用 Jackson XML 擴充套件的 XmlMapper 讀取和寫入 XML。您可以透過使用 JAXB 或 Jackson 提供的註解根據需要自定義 XML 對映。當您需要進一步控制(對於需要為特定型別提供自定義 XML 序列化器/反序列化器的情況)時,您可以透過 ObjectMapper 屬性注入自定義 XmlMapper。預設情況下,此轉換器支援 application/xml。這需要 com.fasterxml.jackson.dataformat:jackson-dataformat-xml 依賴項。

KotlinSerializationJsonHttpMessageConverter

一個 HttpMessageConverter 實現,可以使用 kotlinx.serialization 讀取和寫入 JSON。此轉換器預設未配置,因為它與 Jackson 衝突。開發人員必須將其配置為 Jackson 之前的一個附加轉換器。

MappingJackson2CborHttpMessageConverter

com.fasterxml.jackson.dataformat:jackson-dataformat-cbor

SourceHttpMessageConverter

一個 HttpMessageConverter 實現,可以從 HTTP 請求和響應中讀取和寫入 javax.xml.transform.Source。僅支援 DOMSourceSAXSourceStreamSource。預設情況下,此轉換器支援 text/xmlapplication/xml

GsonHttpMessageConverter

一個 HttpMessageConverter 實現,可以使用“Google Gson”讀取和寫入 JSON。這需要 com.google.code.gson:gson 依賴項。

JsonbHttpMessageConverter

一個 HttpMessageConverter 實現,可以使用 Jakarta Json Bind API 讀取和寫入 JSON。這需要 jakarta.json.bind:jakarta.json.bind-api 依賴項以及一個可用的實現。

ProtobufHttpMessageConverter

一個 HttpMessageConverter 實現,可以以二進位制格式讀取和寫入 Protobuf 訊息,內容型別為 "application/x-protobuf"。這需要 com.google.protobuf:protobuf-java 依賴項。

ProtobufJsonFormatHttpMessageConverter

一個 HttpMessageConverter 實現,可以在 Protobuf 訊息和 JSON 文件之間進行讀寫。這需要 com.google.protobuf:protobuf-java-util 依賴項。

© . This site is unofficial and not affiliated with VMware.