Java --- springboot3之web内容协商原理

一、内容协商原理

HttpMessageConverter

定制 HttpMessageConverter 来实现多端内容协商

编写WebMvcConfigurer提供的configureMessageConverters底层,修改底层的MessageConverter

@ResponseBodyHttpMessageConverter处理

标注了@ResponseBody的返回值 将会由支持它的 HttpMessageConverter写给浏览器

1、如果controller方法的返回值标注了 @ResponseBody 注解

     🍕、请求进来先来到DispatcherServletdoDispatch()进行处理

     🍔、找到一个 HandlerAdapter 适配器。利用适配器执行目标方法

     🍟、RequestMappingHandlerAdapter来执行,调用invokeHandlerMethod()来执行目标方法。

     🌭、目标方法执行之前:①、HandlerMethodArgumentResolver:参数解析器,确定目标方法每个参数值。②、HandlerMethodReturnValueHandler:返回值处理器,确定目标方法的返回值改怎么处理。

     🧂、RequestMappingHandlerAdapter 里面的invokeAndHandle()真正执行目标方法。

     🥓、目标方法执行完成,会返回返回值对象。

     🥚、找到一个合适的返回值处理器 HandlerMethodReturnValueHandler

  🍳、最终找到 RequestResponseBodyMethodProcessor能处理 标注了 @ResponseBody注解的方法。

      🧇、RequestResponseBodyMethodProcessor 调用writeWithMessageConverters ,利用MessageConverter把返回值写出去。

2、HttpMessageConverter先进行内容协商

     🥞、遍历所有的MessageConverter看谁支持这种内容类型的数据。

     🧈、默认MessageConverter有以下

  

     

    🥨、最终因为要json所以MappingJackson2HttpMessageConverter支持写出json。

    🥯、jackson用ObjectMapper把对象写出去。

WebMvcAutoConfiguration提供几种默认HttpMessageConverters

 EnableWebMvcConfiguration通过 addDefaultHttpMessageConverters添加了默认的MessageConverter。

  •  ByteArrayHttpMessageConverter: 支持字节数据读写
    • StringHttpMessageConverter: 支持字符串读写
    • ResourceHttpMessageConverter:支持资源读写
    • ResourceRegionHttpMessageConverter: 支持分区资源写出
    • AllEncompassingFormHttpMessageConverter:支持表单xml/json读写
    • MappingJackson2HttpMessageConverter: 支持请求响应体Json读写

系统提供默认的MessageConverter 功能有限,仅用于json或者普通返回数据。额外增加新的内容协商功能,必须增加新的HttpMessageConverter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值