HttpMessageConverter<T> 接口在 Spring 框架中有多个实现类,这些实现类负责处理不同媒体类型(如 JSON、XML、Atom、RSS 等)

HttpMessageConverter 接口在 Spring 框架中有多个实现类,这些实现类负责处理不同媒体类型(如 JSON、XML、Atom、RSS 等)的 HTTP 消息转换。以下是一些常见的 HttpMessageConverter 实现类:

MappingJackson2HttpMessageConverter:
这个类用于处理 JSON 格式的请求和响应消息。它使用 Jackson 库将 Java 对象序列化为 JSON 字符串,以及将 JSON 字符串反序列化为 Java 对象。

Jaxb2RootElementHttpMessageConverter:
这个类用于处理 XML 格式的请求和响应消息。它使用 JAXB(Java Architecture for XML Binding)库将 Java 对象映射到 XML,以及将 XML 映射回 Java 对象。

RssChannelHttpMessageConverter 和 AtomFeedHttpMessageConverter:
这两个类分别用于处理 RSS 和 Atom 格式的 feed 数据。

StringHttpMessageConverter:
这个类用于处理简单的文本消息。它可以将字符串直接写入响应或从请求中读取字符串。

ByteArrayHttpMessageConverter:
这个类用于处理字节数组格式的请求和响应消息。它可以直接处理二进制数据。

FormHttpMessageConverter:
这个类用于处理表单数据的请求和响应。它可以将表单数据转换为 MultiValueMap<String, String> 对象,也可以将这样的对象转换为表单数据。

ResourceHttpMessageConverter:
这个类用于处理资源文件的请求和响应,比如图片、文件下载等。

MappingJackson2XmlHttpMessageConverter:
这个类使用 Jackson 库将 Java 对象序列化为 XML,以及将 XML 反序列化为 Java 对象。它不同于 Jaxb2RootElementHttpMessageConverter,因为它不依赖于 JAXB,而是使用 Jackson 的 XML 模块。

GsonHttpMessageConverter(需要额外添加依赖):
这个类使用 Gson 库来处理 JSON 格式的请求和响应消息。

ProtobufHttpMessageConverter(需要额外添加依赖):
这个类用于处理 Protocol Buffers 格式的请求和响应消息。

在 Spring Boot 中,这些转换器通常会自动配置,但你也可以通过实现 WebMvcConfigurer 接口并重写 extendMessageConverters 方法来定制或添加自定义的 HttpMessageConverter 实现。

例如,要添加自定义的 JSON 转换器,你可以这样做:

java
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override  
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {  
    MappingJackson2HttpMessageConverter customConverter = new MappingJackson2HttpMessageConverter();  
    // 自定义配置,比如设置日期格式、序列化配置等  
    converters.add(customConverter);  
}  

}
在这个例子中,我们创建了一个自定义的 MappingJackson2HttpMessageConverter 并将其添加到了现有的转换器列表中。这允许我们覆盖默认的 JSON 转换器行为,以满足特定的需求。
HttpMessageConverter 类在 Spring 框架中有多个常见的实现类,这些实现类负责将 HTTP 请求和响应的消息体转换为 Java 对象,以及将 Java 对象转换为 HTTP 消息体。以下是一些常见的 HttpMessageConverter 实现类:

StringHttpMessageConverter:
这个转换器可以将请求和响应的消息体直接处理为字符串(String)类型。

ByteArrayHttpMessageConverter:
这个转换器可以将请求和响应的消息体处理为字节数组(byte[])类型,适用于二进制数据的传输。

ResourceHttpMessageConverter:
这个转换器用于处理资源文件的请求和响应,比如图片、文件下载等。它将资源文件作为 Resource 对象进行转换。

SourceHttpMessageConverter:
这个转换器用于处理基于 JAXP Source 类型的消息体,通常用于处理 XML 数据。

Jaxb2RootElementHttpMessageConverter:
这个转换器使用 JAXB(Java Architecture for XML Binding)来将请求和响应的消息体转换为 Java 对象,或者将 Java 对象转换为 XML 格式的消息体。

MappingJackson2HttpMessageConverter:
这个转换器使用 Jackson 库来将请求和响应的消息体转换为 JSON 格式,或者将 JSON 格式的消息体转换为 Java 对象。它是处理 JSON 数据时最常用的转换器之一。

GsonHttpMessageConverter:
这个转换器使用 Gson 库来将请求和响应的消息体转换为 JSON 格式,或者将 JSON 格式的消息体转换为 Java 对象。它是处理 JSON 数据的另一种选择。

ProtobufHttpMessageConverter:
这个转换器用于处理 Protocol Buffers(Protobuf)格式的消息体。它将 Protobuf 数据转换为 Java 对象,或者将 Java 对象转换为 Protobuf 数据。

AtomFeedHttpMessageConverter 和 RssChannelHttpMessageConverter:
这两个转换器分别用于处理 Atom 和 RSS 格式的 feed 数据。

FormHttpMessageConverter:
这个转换器用于处理表单数据的请求和响应。它可以将表单数据转换为 MultiValueMap<String, String> 对象,或者将这样的对象转换为表单数据。

Jaxb2RootElementHttpMessageConverter 和 MappingJackson2XmlHttpMessageConverter:
这两个转换器都用于处理 XML 数据,但使用的库不同。前者使用 JAXB,后者使用 Jackson 的 XML 模块。

在 Spring Boot 中,这些 HttpMessageConverter 实现类通常会自动配置,以满足常见的需求。然而,你也可以通过实现 WebMvcConfigurer 接口并重写 configureMessageConverters 方法来定制或添加自定义的 HttpMessageConverter 实现。例如:

java
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override  
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {  
    // 创建一个自定义的 MappingJackson2HttpMessageConverter  
    MappingJackson2HttpMessageConverter customConverter = new MappingJackson2HttpMessageConverter();  
    // 对 customConverter 进行自定义配置  

    // 将自定义的转换器添加到转换器列表中  
    converters.add(customConverter);  
}  

}
在上面的代码中,我们创建了一个自定义的 MappingJackson2HttpMessageConverter 并将其添加到了 Spring MVC 的转换器列表中。这样,我们就可以覆盖默认的 JSON 转换器行为,以满足特定的需求。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值