此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

HTTP 消息转换

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

框架中提供了主媒体 (MIME) 类型的具体实现,默认情况下,它们在RestClientRestTemplate在客户端,使用RequestMappingHandlerAdapter在服务器端(请参阅 配置消息转换器)。spring-doc.cadn.net.cn

的几种实现HttpMessageConverter如下所述。 请参阅HttpMessageConverterJavadoc以获取完整列表。 对于所有转换器,都使用默认媒体类型,但您可以通过设置supportedMediaTypes财产。spring-doc.cadn.net.cn

表 1.HttpMessageConverter 实现
消息转换器 描述

StringHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter可以读写的实现String实例。 默认情况下,此转换器支持所有文本媒体类型(text/*) 并使用Content-Typetext/plain.spring-doc.cadn.net.cn

FormHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter可以从 HTTP 请求和响应中读取和写入表单数据的实现。 默认情况下,此转换器读取和写入application/x-www-form-urlencodedmedia 类型。 表单数据从MultiValueMap<String, String>. 转换器还可以写入(但不能读取)从MultiValueMap<String, Object>. 默认情况下,multipart/form-data受支持。 可以支持其他多部分子类型来写入表单数据。 请参阅 javadoc 以获取FormHttpMessageConverter了解更多详情。spring-doc.cadn.net.cn

ByteArrayHttpMessageConverterspring-doc.cadn.net.cn

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

MarshallingHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter实现,该实现可以使用 Spring 的MarshallerUnmarshallerabstractions 的org.springframework.oxm包。 此转换器需要一个MarshallerUnmarshaller才能使用。 您可以通过 constructor 或 bean 属性注入这些内容。 默认情况下,此转换器支持text/xmlapplication/xml.spring-doc.cadn.net.cn

MappingJackson2HttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter可以使用 Jackson 的ObjectMapper. 您可以使用 Jackson 提供的注释根据需要自定义 JSON 映射。 当你需要进一步的控制时(对于需要为特定类型提供自定义 JSON 序列化器/反序列化器的情况),你可以注入一个自定义的ObjectMapper通过ObjectMapper财产。 默认情况下,此转换器支持application/json.这需要com.fasterxml.jackson.core:jackson-databindDependency。spring-doc.cadn.net.cn

MappingJackson2XmlHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter可以使用 Jackson XML 扩展的XmlMapper. 您可以根据需要通过使用 JAXB 或 Jackson 提供的注释来自定义 XML 映射。 当你需要进一步的控制时(对于需要为特定类型提供自定义 XML 序列化器/反序列化器的情况),你可以注入一个自定义的XmlMapper通过ObjectMapper财产。 默认情况下,此转换器支持application/xml.这需要com.fasterxml.jackson.dataformat:jackson-dataformat-xmlDependency。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

HttpMessageConverter可以读写的实现javax.xml.transform.Source从 HTTP 请求和响应。 只DOMSource,SAXSourceStreamSource受支持。 默认情况下,此转换器支持text/xmlapplication/xml.spring-doc.cadn.net.cn

GsonHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter可以使用 “Google Gson” 读取和写入 JSON 的实现。 这需要com.google.code.gson:gsonDependency。spring-doc.cadn.net.cn

JsonbHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter可以使用 Jakarta Json Bind API 读取和写入 JSON 的实现。 这需要jakarta.json.bind:jakarta.json.bind-apidependency 和 implementation available。spring-doc.cadn.net.cn

ProtobufHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter实现,该实现可以读取和写入二进制格式的 Protobuf 消息,并且"application/x-protobuf"内容类型。这需要com.google.protobuf:protobuf-javaDependency。spring-doc.cadn.net.cn

ProtobufJsonFormatHttpMessageConverterspring-doc.cadn.net.cn

HttpMessageConverter可以在 Protobuf 消息中读取和写入 JSON 文档的实现。 这需要com.google.protobuf:protobuf-java-utilDependency。spring-doc.cadn.net.cn