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.