1. 接口
① HttpMessageConverter<T>负责将请求信息转换为一个对象(类型为 T)
② HttpMessageConverter<T>接口定义的方法:
Boolean canRead(Class<?> clazz,MediaType mediaType):
Boolean canWrite(Class<?> clazz,MediaType mediaType)
List<MediaType> getSupportMediaTypes()
T read(Class<? extends T> clazz,HttpInputMessage inputMessage)
void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage)
实现类 | 功能说明 |
StringHttpMessageConverter | 将请求信息转换为字符串 |
FormHttpMessageConverter | 将表单数据读取到MultiValueMap中 |
XmlAwareFormHttpMessageConverter扩展于FormHttpMessageConverter, | 如果部分表单属性是XML数据,可用该转换器进行读取 |
ResourceHttpMessageConverter | 读写org.springframework.core.io.Resource 对象 |
BufferedlmageHttpMessageConverter | 读写Bufferedlmage 对象 |
ByteAnrayHttpMessageConverter | 读写二进制数据 |
SourceHttpMessageConverter | 读写javax.xml.transform.Source 类型的数据 |
MarshallingHttpMessageConverter | 通过Spring 的 org.springframework.xml.Marshaller 和 Unmarshaller 读写 XML 消息 |
Jaxb2RootElemengHttpMessageConverter | 通过JAXB2读写XML消息,将请求消息转换到标注XmlRootElement和XxmlType直接的类中 |
MappingJacksonHttpMessageConverter | 利用Jackson开源包的ObjectMapper读写JSON数据 |
RssChannelHttpMessageConverter | 能遂读写RSS种子消息 |
AiomFeedHttpMessageConverter | 和RssChannelHttpMessageConverter 能年读写 RSS 种子消息 |
2. 流程
使用 HttpMessageConverter<T> 将请求信息转化并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息
使用 @RequestBody @ResponseBody对处理方法进行标注
使用 HttpEntity<T> ResponseEntity<T>作为处理方法的入参或返回值
Spring 首先根据请求头或响应头的Accept属性选择匹配的HttpMessageConverter, 进而根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter, 若找不到可用的 HttpMessageConverter 将报错