Spring源码学习--HttpMessageConverter<T>接口

本文介绍了Spring 3.0引入的HttpMessageConverter接口,该接口用于将请求信息转换为对象,并将对象绑定到请求方法参数或响应信息。详细讲解了接口源码、HttpInputMessage和HttpOutputMessage接口及其在DispatcherServlet和RequestMappingHandlerAdapter中的应用。同时,讨论了HttpMessageConverter的多种实现类及其在Spring MVC中的实际运用。
摘要由CSDN通过智能技术生成

文章参考:

1 http://blog.csdn.net/silencecarrot/article/details/52493709

2 http://blog.csdn.net/qq924862077/article/details/55222947

前言:

HttpMessageConverter接口是Spring3.0之后新增的一个接口,它负责将请求信息转换为一个对象(类型为T),并将对象(类型为T)绑定到请求方法的参数中或输出为响应信息。

一 丶HttpMessageConverter接口源码

在SpringMVC中,DispatcherServlet默认装配了RequestMappingHandlerAdapter作为HandlerAdapter组件的实现类,即HttpMessageConverter由RequestMappingHandlerAdapter使用,将请求信息转换为对象,或将对象转换为响应信息。其中RequestMappingHandlerAdapter是如何使用HttpMessageConverter的实现类的后续会有新文章说明。

下面是HttpMessageConverter接口中定义了方法:

package org.springframework.http.converter;

import java.io.IOException;
import java.util.List;

import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;

/**
 * Strategy interface that specifies a converter that can convert from and to HTTP requests and responses.
 *
 * @author Arjen Poutsma
 * @author Juergen Hoeller
 * @since 3.0
 */
public interface HttpMessageConverter<T> {

	/**
	 * 该方法指定转换器可以读取的对象类型,即转换器可将请求信息转换为clazz类型的对象,
	 * 同时指定支持的MIME类型(text/html、application/json等)。
	 */
	boolean canRead(Class<?> clazz, MediaType mediaType);

	/**
根据您提供的配置,处理器适配器(RequestMappingHandlerAdapter)和类型转换器(ConversionServiceFactoryBean)之间没有直接的冲突。这两个配置分别用于处理请求和处理类型转换。 然而,问题可能是在配置处理器适配器时,重写了默认的消息转换器配置,导致类型转换器失效。默认情况下,处理器适配器会使用Spring Boot提供的默认消息转换器(MappingJackson2HttpMessageConverter)来处理JSON转换。 如果您在处理器适配器中明确配置了消息转换器列表,它将替代默认的消息转换器配置。这意味着您需要手动将所有所需的消息转换器添加到列表中,包括用于JSON转换的 `MappingJackson2HttpMessageConverter` 和您自定义的转换器 `MyConverter`。 解决方法是,在处理器适配器的消息转换器列表中同时包含默认的 JSON 转换器和自定义的转换器: ```xml <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> <bean class="com.example.springMVCshili.uilt.MyConverter"/> </list> </property> </bean> ``` 这样配置后,将同时启用默认的 JSON 转换器和您的自定义类型转换器,以便在处理请求时进行正确的类型转换。 请注意,为了使用默认的 JSON 转换器,您需要导入相应的 Jackson 库。确保已经在项目中正确导入了相关的 Jackson JAR 包。 希望对您有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值