在前面章节中讲到的@RequestBody、@ResponseBody等注解,之所以可以进行Json与Java Bean之间的相互转换,就是因为HttpMessageConverter发挥着作用。
HTTP请求和响应是基于文本的,意味着浏览器和服务器通过文本进行通信,之所以文本会形成与Java对象之间进行相互转换,就是通过由合适的消息转换器进行操作的。同时,同一个对象就有可能出现多种不同的消息形式,比如json和xml。
当报文被发送到服务器,会被封装为一个ServletInputStream流,响应报文则是ServletOutputStream流。输入输出流中只能读取到原始的字符串报文。
在Spring Boot或Spring MVC之所以能够实现这一转换过程就是通过HttpMessageConverter接口来实现的。而这些实现细节一般对编程人员来说是处于屏蔽状态的。
HttpMessageConverter接口源码:
public interface HttpMessageConverter<T> {
boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException;
void write(T t, @Nullable MediaType contentType, HttpOutputMessage