首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spring消息转换流程

Spring消息转换流程

作者头像
十毛
发布2021-07-27 14:40:56
发布2021-07-27 14:40:56
2680
举报

Spring MVC消息转换流程

1. 调用方法获取返回值

代码语言:javascript
复制
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#invokeAndHandle

Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);

2. 获取返回值的处理器

代码语言:javascript
复制
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite#handleReturnValue

//如果使用了@RequestBody,返回的就是RequestResponseBodyMethodProcessor
HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);

3. 使用MessageConverter转换body

代码语言:javascript
复制
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor#handleReturnValue

mavContainer.setRequestHandled(true);

ServletServerHttpRequest inputMessage = createInputMessage(webRequest);
ServletServerHttpResponse outputMessage = createOutputMessage(webRequest);

//执行消息转换
// Try even with null return value. ResponseBodyAdvice could get involved.
writeWithMessageConverters(returnValue, returnType, inputMessage, outputMessage);
消息转换的逻辑
  • 先确定返回消息的MediaType: 根据可接受的MediaType和接口支持MediaType取交集中的第一个
  • 根据MediaType找到支持的消息转换器: 比如StringHttpMessageConverter,MappingJackson2HttpMessageConverter等
  • 转换消息: GenericHttpMessageConverter#write或HttpMessageConverter#write
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 调用方法获取返回值
  • 2. 获取返回值的处理器
  • 3. 使用MessageConverter转换body
    • 消息转换的逻辑
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档