HttpMessageConvertor<、T>是Spring 3.0之后新增的一个重要的接口,他负责将请求信息转换为一个对象(类型为T),并将对象(类型为T)绑定到请求方法的参数中或者输出为相应信息。
DispatcherServlet默认已经转配了RequestMappingHandlerAdapter作为HandlerAdapter组件的实现类,即HttpMessageConverter由RequestMappingHandlerAdapter使用,将请求信息转换为对象,或将对象转换为相应信息。
HttpMessageConverter<\T>接口中定义了以下几个方法:
boolean canRead(Class<\?> clazz,MediaType mediaType )该方法指定转换器可以读取的对象类型,即转换器可将请求信息转换为clazz 类型的对象,同时指定支持的MIME类型(text/html、application/json)
boolean canWrite(Class<\?> clazz,MediaType nediaType) 该方法指定类型转换器可以将clazz类型的对象写到相应流当中,响应流支持的媒体类型在mediaType中定义
List<\MediaType> getSupportedMediaTypes()该方法返回当前转换器支持的媒体类型
T read(Class<\? extends T> clazz,HttpInputMessage inputMessage )该方法将请求信息流转换为T类型的对象
void write(T t,MediaType contentType,HttpOutputMessage outputMessage)该方法将T类型的对象写到响应流当中,同时指定响应的媒体类型为contentType。
Spring为HttpMessageConverter<\T>提供了多个实现类,这些实现类组成了一个功能强大、用途广泛的信息转换家族,详细说明如下:
1、StringHttpMessageConverter
2、FormHttpMessageConverter
3、XmlAwareFormHttpMessageConverter
4、ResourceHttpMessageConverter
5、BufferedImageHttpMessageConverter
6、ByteArrayHttpMessageConverter
7、SourceHttpMessageConverter
8、MarshallingHttpMessageConverter
9、Jaxb2RootElementHttpMessageConverter
10、MappingJackson2HttpMessageConverter
11、RssChannelHttpMessageConverter
12、AtomFeeHttpMessageConverter