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;

public interface HttpMessageConverter<T> {
    boolean canRead(Class<?> var1, MediaType var2);

    boolean canWrite(Class<?> var1, MediaType var2);

    List<MediaType> getSupportedMediaTypes();

    T read(Class<? extends T> var1, HttpInputMessage var2) throws IOException, HttpMessageNotReadableException;

    void write(T var1, MediaType var2, HttpOutputMessage var3) throws IOException, HttpMessageNotWritableException;
}

该接口定义了四个方法,分别是读取数据时的 canRead(), read() 和 写入数据时的canWrite(), write()方法。在使用 <mvc:annotation-driven />标签配置时,默认配置了java

RequestMappingHandlerAdapter,并未它配置了一个默认的HttpMessageConverter.spring

ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;json

StringHttpMessageConverter:   负责读取字符串格式的数据和写出二进制格式的数据;mvc

ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据; app

FormHttpMessageConverter:       负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据;url

MappingJacksonHttpMessageConverter:  负责读取和写入json格式的数据;spa

SouceHttpMessageConverter:                   负责读取和写入 xml 中javax.xml.transform.Source定义的数据;code

Jaxb2RootElementHttpMessageConverter:  负责读取和写入xml 标签格式的数据;orm

AtomFeedHttpMessageConverter:              负责读取和写入Atom格式的数据;xml

RssChannelHttpMessageConverter:           负责读取和写入RSS格式的数据;

当使用@RequestBody和@ResponseBody注解时,RequestMappingHandlerAdapter就使用它们来进行读取或者写入相应格式的数据。

HttpMessageConverter匹配过程:

@RequestBody注解时: 根据Request对象header部分的Content-Type类型,逐一匹配合适的HttpMessageConverter来读取数据;

@ResponseBody注解时: 根据Request对象header部分的Accept属性(逗号分隔),逐一按accept中的类型,去遍历找到能处理的HttpMessageConverter;

相关文章
相关标签/搜索