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 資料。預設情況下,支援 multipart/form-data。可以支援其他 multipart 子類型來寫入表單資料。有關更多詳細資訊,請參閱 FormHttpMessageConverter 的 javadoc。

ByteArrayHttpMessageConverter

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

MarshallingHttpMessageConverter

HttpMessageConverter 實作,可以使用 Spring 的 org.springframework.oxm 套件中的 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 相依性。

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 實作,可以使用 "application/x-protobuf" 內容類型讀取和寫入二進制格式的 Protobuf 訊息。這需要 com.google.protobuf:protobuf-java 相依性。

ProtobufJsonFormatHttpMessageConverter

HttpMessageConverter 實作,可以將 JSON 文件讀取和寫入 Protobuf 訊息。這需要 com.google.protobuf:protobuf-java-util 相依性。