HttpMessageConverter接口

一、HttpMessageConverter<T>接口

HttpMessageConverter<T>接口负责将请求信息转换为一个对象(类型为T),将对象(类型为T)输出为响应信息

在这里插入图片描述

  • boolean canRead(Class<?> var1, @Nullable MediaType var2)
    指定转换器可以读取的对象类型,即转换器是否可将请求信息转换为clazz类型的对象,同时指定支持MIME类型(text/htmlapplication/json等)。

  • boolean canWrite(Class<?> var1, @Nullable MediaType var2)
    指定转换器是否可将clazz类型的对象写到响应流中,响应流支持的媒体类型在MedicaType中定义。

  • List<MediaType> getSupportedMediaTypes()
    获取该转换器支持的媒体类型。

  • T read(Class<? extends T> var1, HttpInputMessage var2) throws IOException, HttpMessageNotReadableException
    将请求信息流转换为T类型的对象,类似使用@RequestBody读取请求体,封装成Employee对象。

  • void write(T var1, @Nullable MediaType var2, HttpOutputMessage var3) throws IOException, HttpMessageNotWritableException
    T类型的对象写到响应流中,同时指定相应的媒体类型为contentType,类似使用@ResponseBodyEmployee集合转换为json字符串响应回去。

其中HttpInputMessage就是一个输入流,它封装了请求信息

public interface HttpInputMessage extends HttpMessage {
    InputStream getBody() throws IOException;
}

HttpOutputMessage就是一个输出流

public interface HttpOutputMessage extends HttpMessage {
    OutputStream getBody() throws IOException;
}

在这里插入图片描述

二、HttpMessageConverter<T>接口的实现类

在这里插入图片描述
加入jackson的jar包之后,RequestMappingHandlerAdapter装配的HttpMessageConverter如下:
在这里插入图片描述
StringHttpMessageConverter只支持String类型,其它也是一样,泛型参数是固定类型

public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String>

MappingJackson2HttpMessageConverter继承父类AbstractJackson2HttpMessageConverter

public class MappingJackson2HttpMessageConverter extends AbstractJackson2HttpMessageConverter

父类AbstractJackson2HttpMessageConverter有继承父类AbstractGenericHttpMessageConverter<Object>,它支持Object类型转换,所以MappingJackson2HttpMessageConverter 也就支持所有的类型的对象

public abstract class AbstractJackson2HttpMessageConverter extends AbstractGenericHttpMessageConverter<Object>

MappingJackson2HttpMessageConverter 中的writePrefix方法相当于把对象转换为json字符串发送出去

    protected void writePrefix(JsonGenerator generator, Object object) throws IOException {
        if (this.jsonPrefix != null) {
            generator.writeRaw(this.jsonPrefix);
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值