在使用SpringMvc时,经常会使用@ResponseBody,用于返回接口数据。即将java实例转为相应格式的数据,比如json、xml等,返回给浏览器。这个转换过程就是通过HttpMessageConverter完成的。
由于系统中有众多的HttpMessageConverter,系统是如何知道应该使用哪个呢,下面是匹配流程:
以响应流程为例:
(1)调用每个HttpMessageConverter的getSupportedMediaTypes()方法,收集所有支持的MediaType。
(2) 将http请求中的MediaType与上面收集的MediaType匹配,将类型一致的放到mediaTypesToUse列表中
(3)从mediaTypesToUse列表中找出第一个有具体类型的MediaType,命名为selectedMediaType
(4)循环遍历所有HttpMessageConverter,调用每个converter的converter.canWrite(valueType, selectedMediaType),如果该方法返回true,则使用该converter处理此次http响应。
具体的可以参考我的视频:
从零开始学习SpringBoot+Mybatis框架_哔哩哔哩_bilibili