首先上源码

在面试时经常会问到我们如何使用SpringMVC将Http请求转换为java对象,或者又是问如何将结果转换为java的呢?

SpringMVC在接收到请求之后HandlerMapping像是一个路由找到处理器和拦截器,而处理器对控制器进行包装就是对控制器进行了功能的增强,而处理器如何能是json和java对象的转换呢?这就要了解

这个时候就会使用到一个类他的作用是HttpMessageConverter<T>,这个的作用是将媒体类型对应的请求读入,控制器返回转换为对应媒体类型

,第二是webDataBinder是提供数据绑定和验证,将结果传给HttpMessageConverter

//HttpMessageConverter的源代码可以分为

是否可以读入媒体类型,是否可以写入媒体类型,

获取媒体类型,读入请求体,将其转换为媒体类型

控制器返回内容

在SpringMVC中关于HttpMessageConverter<T>实现的类有很多,SpringMVC会将实现HttpMessageConverter<T>的实现类组织成一条链存放起来,,而支持JSON转换的是

MappingJackson2HttpMessageConverter<T>springMVC会自动将它放入到MVC的链中,在这里我们不需要进行任何编码

@RequestBody的执行流程是,在HttpMessageConver中会有5个方法,在加上注解之后其中的canRead会去判断是否能读,如果可以就会执行MappingJackson2HttpMessageConverter,跟着会去执行read方法

,将请求体转换为java对象,这就是#RequestBody的原理

@ResponseBody的执行流程是,当你标注之后就会记录相应体为JSON类型,当控制器返回后走到HttpMessageConverter链的时候通过canWriter判断是否能进行写,在经过MappingJackson2HttpConverter的实例调用writer方法将控制器返回JSON,之后的流程会得到一个空参数就不在执行了

转载于:https://www.cnblogs.com/chenligeng/p/10784584.html

SpringMVC中注解@RequestBody和@ResponseBody的使用区别相关推荐

  1. 在SpringMVC中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案

    在SpringMVC中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案 参考文章: (1)在SpringMVC中使用@Reque ...

  2. 在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案

    在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案 参考文章: (1)在SpringMVC中使用@RequestBody注解处理json ...

  3. SpringMVC中的拦截器、过滤器的区别、处理异常

    SpringMVC中的拦截器.过滤器的区别.处理异常 参考文章: (1)SpringMVC中的拦截器.过滤器的区别.处理异常 (2)https://www.cnblogs.com/ahaijava/p ...

  4. SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换)

    Spring3.1开始使用新的HandlerMapping 和 HandlerAdapter 来支持@Contoller 和@RequestMapping注解处理:处理器映射RequestMappin ...

  5. SpringMVC中注解和非注解形式配置

    目录 一.注解形式 1.各组件的配置文件 springmvc1.xml 2.Controller类 二.非注解形式实现 1.各组件的配置文件 springmvc2.xml 2.User1Control ...

  6. SpringMVC中注解的使用

    1.@RequestMapping:在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中 ...

  7. Spring MVC常用注解--“姐妹花”@RequestBody和@ResponseBody

    1. 引言 在这篇短文中,我们简要地介绍了Spring MVC中常用的注解 @RequestBody和@ResponseBody. 2. @RequestBody 简单地说,在@RequestBody ...

  8. SpringMVC中使用@ResponseBody注解标注业务方法

    SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面 导包: 除了一些spring的包之外,还需要jackson-annotations.jar ...

  9. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)

    九.数据绑定流程分析 1.提出问题 日期字符串格式的表单参数,提交后转换为Date类型 <!--    解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay ...

最新文章

  1. 重新挂载linux分区添加硬盘
  2. paddleoc onnx转换推理
  3. Asp.net中Postback及Callback
  4. python for循环连续输入五个成绩判断等级_Python 入门(五)条件判断和循环
  5. swf批量转png_CAD批量打印(探索者易打软件)优势介绍
  6. Centos7下python2.x 和python3.x共存
  7. 160 - 8 Andrnalin.1
  8. 【服务器】【个人网盘】宝塔安装OneIndex
  9. java getselecteditem_java – 为什么JComboBox上的getSelectedItem()不是通用的?
  10. 5、Android搭建RN开发环境
  11. 金蝶KIS/K3全版本下载地址
  12. 3D视频调校技术解决之道重点在3D眼镜
  13. 国家/地区 语言缩写代码 查询备用
  14. 为什么走线选择50欧姆阻抗
  15. 滴滴Uber又打起来了!外卖领域C位花落谁家?
  16. proxmox换源_安装proxmox后注意事项
  17. php使用imagemagick处理图片圆角
  18. 【Java】java格式化时间到毫秒
  19. 解决更新音频驱动后显示驱动异常——Smart Sound Technology
  20. SCI论文写作神器集合 —— 超级实用

热门文章

  1. Luogu P2309 loidc,卖卖萌
  2. stackless python初体验
  3. 回顾Swift 3,展望Swift 4
  4. spring MVC要注意的地方 2
  5. Java正则表达式应用总结
  6. 《Pro ASP.NET MVC 3 Framework》学习笔记之十八【URL和Routing】
  7. 迅雷使用积分制的真正作用和目的   [揭密迅雷]
  8. 解决openfire在使用MySQL数据库后的中文乱码问题(转)
  9. Java 编解码问题
  10. ubuntu 开源镜像_Ubuntu手机可能对开源意味着什么