HttpMessageConverter

Exisi 2022-06-28 14:49:52
Categories: Tags:

 

 

 

 

方法

说明

返回类型

异常捕获

canRead(Class<?> clazz, MediaType mediaType)

是否可读,若可读则调用read()方法

boolean 

 

canWrite(Class<?> clazz, MediaType mediaType);

是否可写,若可写则点用write()方法

boolean 

 

getSupportedMediaTypes();

获取支持的媒体转换类型

List<MediaType> 

 

read(Class<? extends T> clazz, HttpInputMessage inputMessage) 

转换类型后读取

T 

throws IOException, HttpMessageNotReadableException;

write(T t, MediaType contentType, HttpOutputMessage outputMessage) 

转换类型后写入

void 

throws IOException, HttpMessageNotWritableException;

 

 

 

HttpMessageConverter接口实现类

​​​​​​​

 

实现类

说明

StringHttpMessageConverter

将请求信息转换为字符串

FormHttpMessageConverter

将表单数据读取到MutilValueMap

XmlAwareFormHttpMessageConverter

扩展于FormHttpMessageConverter,如果部分表单数据属性是XML数据,可用该转换器进行读取

ResourceHttpMessageConverter

读写org.springframework.core.io.Resource对象

BufferedImageHttpMessageConverter

读写BufferedImage对象

ByteArrayHttpMessageConverter

读写二进制数据

SourceHttpMessageConverter

读写javax.xml.transform.Source对象

MarshallingHttpMessageConverter

通过Springorg.springframework.xml.MarshallerUnmarshaller读写XML消息

Jaxb2RootElementHttpMessafeConverter

通过JAXB2读写XML消息,将请求消息转换到标注XmlRootElementXxmlType消息的类中

MappingJackson2HttpMessageConverter

利用Jackson开源包的ObjectMapper读写JSON数据

RssChannelHttpMessageConverter

能够读写RSS种子消息

AtomFeedHttpMessageConverter

RssChannelHttpMessageConverter能够读写RSS种子消息

 

 

protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters){

    StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();

    stringConverter.setWriteAcceptCharset(false);

 

    messageConverters.add(new ByteArrayHttpMessageConverter());

    messageConverters.add(stringConverter);

    messageConverters.add(new ResourceHttpMessageConverter());

    messageConverters.add(new SourceHttpMessageConverter<Source>());

    messageConverters.add(new AllEncompassingFormHttpMessageConverter());

 

    if (romePresent) {

        messageConverters.add(new AtomFeedHttpMessageConverter());

        messageConverters.add(new RssChannelHttpMessageConverter());

    }

 

    if (jackson2XmlPresent) {

        ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.xml().applicationContext(this.applicationContext).build();

        messageConverters.add(new MappingJackson2XmlHttpMessageConverter(objectMapper));

    }

    else if (jaxb2Present) {

        messageConverters.add(new Jaxb2RootElementHttpMessageConverter());

    }

 

    if (jackson2Present) {

        ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().applicationContext(this.applicationContext).build();

        messageConverters.add(new MappingJackson2HttpMessageConverter(objectMapper));

    }

    else if (gsonPresent) {

        messageConverters.add(new GsonHttpMessageConverter());

    }

}

 

 

 

protected final List<HttpMessageConverter<?>> getMessageConverters(){

    if (this.messageConverters == null)    {

        this.messageConverters = new ArrayList<HttpMessageConverter<?>>();

        configureMessageConverters(this.messageConverters);

        if (this.messageConverters.isEmpty())        {

            addDefaultHttpMessageConverters(this.messageConverters);

        }

        extendMessageConverters(this.messageConverters);

    }

    return this.messageConverters;

}