此版本仍在开发中,尚未稳定。如需最新的稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

HTTP 消息转换

spring-web 模块包含 HttpMessageConverter 接口,用于通过 InputStreamOutputStream 读取和写入 HTTP 请求和响应的正文。 HttpMessageConverter 实例在客户端(例如,在 RestClient 中)和服务器端(例如,在 Spring MVC REST 控制器中)使用。spring-doc.cadn.net.cn

框架为主要媒体(MIME)类型提供了具体实现,并且默认情况下在客户端与RestClientRestTemplate注册,在服务器端与RequestMappingHandlerAdapter注册(参见配置消息转换器)。spring-doc.cadn.net.cn

以下是 HttpMessageConverter 的几种实现方式。 有关完整列表,请参考 HttpMessageConverter Javadoc。 对于所有转换器,均使用默认的媒体类型,但您可以通过设置 supportedMediaTypes 属性来覆盖它。spring-doc.cadn.net.cn

表 1. HttpMessageConverter 实现
MessageConverter 描述

StringHttpMessageConverterspring-doc.cadn.net.cn

一个可以从HTTP请求和响应中读取和写入String实例的HttpMessageConverter实现。默认情况下,此转换器支持所有文本媒体类型(text/*),并使用Content-Typetext/plain进行编写。spring-doc.cadn.net.cn

FormHttpMessageConverterspring-doc.cadn.net.cn

一种 HttpMessageConverter 实现,能够从HTTP请求和响应中读取和写入表单数据。 默认情况下,此转换器读取和写入 application/x-www-form-urlencoded 媒体类型。 表单数据从 MultiValueMap<String, String> 中读取并写入其中。 该转换器还可以写入(但不能读取)从 MultiValueMap<String, Object> 读取的多部分数据。 默认支持 multipart/form-data。 可为写入表单数据支持其他多部分子类型。 有关更多详细信息,请参阅 FormHttpMessageConverter 的javadoc。spring-doc.cadn.net.cn

ByteArrayHttpMessageConverterspring-doc.cadn.net.cn

一个可以从HTTP请求和响应中读取和写入字节数组的HttpMessageConverter实现。默认情况下,此转换器支持所有媒体类型(*/*),并使用Content-Typeapplication/octet-stream进行写入。您可以通过设置supportedMediaTypes属性并重写getContentType(byte[])来覆盖此设置。spring-doc.cadn.net.cn

MarshallingHttpMessageConverterspring-doc.cadn.net.cn

一个 HttpMessageConverter 实现,可以通过 Spring 的 MarshallerUnmarshaller 抽象从 org.springframework.oxm 包中读取和写入 XML。 此转换器在使用前需要 MarshallerUnmarshaller。您可以通过构造函数或 bean 属性注入这些内容。默认情况下,此转换器支持 text/xmlapplication/xmlspring-doc.cadn.net.cn

MappingJackson2HttpMessageConverterspring-doc.cadn.net.cn

一个使用Jackson的HttpMessageConverter实现,能够读写JSON。 您可以通过使用Jackson提供的注解按需自定义JSON映射方式。 当需要进一步控制(例如,针对特定类型需要提供自定义的JSON序列化器/反序列化器时),可以通过ObjectMapper属性注入自定义的ObjectMapper。 默认情况下,此转换器支持application/json。这需要com.fasterxml.jackson.core:jackson-databind依赖项。spring-doc.cadn.net.cn

MappingJackson2XmlHttpMessageConverterspring-doc.cadn.net.cn

一个使用HttpMessageConverter实现的,能够通过Jackson XML扩展的XmlMapper读写XML。 您可以通过JAXB或Jackson提供的注解按需自定义XML映射方式。 当需要进一步控制时(例如:针对特定类型需要提供自定义XML序列化/反序列化器的情况),可以通过ObjectMapper属性注入自定义的XmlMapper。 默认情况下,此转换器支持application/xml。这需要com.fasterxml.jackson.dataformat:jackson-dataformat-xml依赖项。spring-doc.cadn.net.cn

MappingJackson2CborHttpMessageConverterspring-doc.cadn.net.cn

com.fasterxml.jackson.dataformat:jackson-dataformat-cborspring-doc.cadn.net.cn

SourceHttpMessageConverterspring-doc.cadn.net.cn

一个可以读取和写入HTTP请求和响应中HttpMessageConverter的实现。仅支持DOMSourceSAXSourceStreamSource。默认情况下,此转换器支持text/xmlapplication/xmlspring-doc.cadn.net.cn

GsonHttpMessageConverterspring-doc.cadn.net.cn

一个可以使用“Google Gson”读写JSON的HttpMessageConverter实现。 这需要com.google.code.gson:gson依赖项。spring-doc.cadn.net.cn

JsonbHttpMessageConverterspring-doc.cadn.net.cn

一个可以使用Jakarta Json绑定API读写JSON的HttpMessageConverter实现。 这需要jakarta.json.bind:jakarta.json.bind-api依赖项和一个可用的实现。spring-doc.cadn.net.cn

ProtobufHttpMessageConverterspring-doc.cadn.net.cn

一个可以读写二进制格式的Protobuf消息的HttpMessageConverter实现,使用了"application/x-protobuf"内容类型。这需要com.google.protobuf:protobuf-java依赖。spring-doc.cadn.net.cn

ProtobufJsonFormatHttpMessageConverterspring-doc.cadn.net.cn

一个可以读取和写入JSON文档与Protobuf消息之间的HttpMessageConverter实现。 这需要com.google.protobuf:protobuf-java-util依赖项。spring-doc.cadn.net.cn