SpringMVC中注解@RequestBody和@ResponseBody的使用区别
首先上源码

在面试时经常会问到我们如何使用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,之后的流程会得到一个空参数就不在执行了
SpringMVC中注解@RequestBody和@ResponseBody的使用区别的更多相关文章
- 在SpringMVC中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案
我在使用SpringMVC的@RequestBody和@ResponseBody注解处理JSON数据的时候,总是出现415的错误,说是不支持所提交数据格式,我在页面中使用了JQuery的AJAX来发出 ...
- SpringMVC中注解控制器及数据绑定
一.Spring2.5之前,我们都是通过实现Controller接口或其他实现来定义我们的处理器类. 二.Spring2.5引入注解式处理器支持,通过@Controller 和 @RequestMap ...
- SpringMVC中注解和非注解方式下的映射器和适配器总结
1. 非注解方式 1.1 处理器适配器 上一节中使用的处理器适配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapte ...
- 【SpringMVC学习03】SpringMVC中注解和非注解方式下的映射器和适配器总结
从上一篇的springmvc入门中已经看到,springmvc.xml中的配置了映射器和适配器,是使用非注解的方式来配置的,这是非注解方式的一种,这里再复习一下: 1. 非注解方式 1.1 处理器适配 ...
- SpringMVC中的拦截器、过滤器的区别、处理异常
1. SpringMVC中的拦截器(Interceptor) 1.1. 作用 拦截器是运行在DispatcherServlet之后,在每个Controller之前的,且运行结果可以选择放行或拦截! 除 ...
- 在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案
Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象. 正好今天有这样的需求,使用一下,结果一直报415,十分头疼. HTTP 415 错误 – 不支持的媒体类型 ...
- springMVC中使用 RequestBody 及 Ajax POST请求 415 (Unsupported Media Type)
使用POST请求的时候一直报错: Ajax 未设置 contentType 时会报 415 . 后台 RequestBody 承接前台参数,故对参数data的要求为“必传”“JSON”,否则会报40 ...
- 注解@requestBody自动封装复杂对象 (成功,自己的例子封装的不是一个复杂对象,只是一个简单的User对象,将jsp页面的name转成json字符串,再用JSON.stringify()传参就行了)
注意:ajax向后台传值的时候,必须加上contentType:"application/json"; springmvc的注解@requestBody可以通过页面提交json来自 ...
- springMVC中@RequestParam和@RequestBody注解的用法
springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...
随机推荐
- ScheduledThreadPoolExecutor线程池scheduleAtFixedRate和scheduleWithFixedDelay的区别
ScheduledFuture<?> result = executor.scheduleAtFixedRate(task,2, 5, TimeUnit.SECONDS); 在延迟2秒之后 ...
- Mysql字符串切分
Mysql字符串切分的处理 前段时间做了一个对于字符串的切分,对于网页爬取的数据或者不规范的数据来源,常常会有这种需求. 由于在处理的过程中,sql语句中对字符串的出里函数以及方法不太了解,走了不少弯 ...
- Centos 7.5下搭建SVN源代码服务器
1.先查看是否存在svn,没有就需要安装svn svnserve --version #查看svn版本号 which svn #查看svn程序所在目录 yum install subversion - ...
- WordPress版微信小程序2.6版发布
WordPress版微信小程序的完善和升级的工作一直都在进行中,我争取保证一个月可以出一个版本,希望通过一点点的改进,让这个开源产品日趋完美. 同时,pro版WordPress微信小程序也在紧锣密鼓的 ...
- (转)Mysql哪些字段适合建立索引
工作中处理数据时,发现某个表的数据达近亿条,所以要为表建索引提高查询性能,以下两篇文章总结的很好,记录一下,以备后用. 数据库建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过3 ...
- Windows10最新更新破坏了PowerShell功能
Java9%E6%8E%A5%E8%BF%91%E4%BA%A4%E4%BB%98%E6%97%A5%E6%9C%9F%E5%92%8C%E8%8C%83%E5%9B%B4%E5%AE%A1%E6%9 ...
- ubuntu下多版本OpenCV的共存与使用
首先,OpenCV历史版本下载:https://www.opencv.org/releases.html 一.把不同版本的OpenCV安装在不同位置 下载好OpenCV源码,在安装之前打开CMakeL ...
- IDEA 常用插件
Maven Helperp3pauto filling Java call argumentsCamelCaseVisualVM LauncherTranslation.ignoreGenerateA ...
- 分组ntile
select order,ntile(3) over (order by order) from ss
- MTK6261之Catcher工具的Database Path
在Catcher使用使用的时候我们常用要选择Database Path 设置数据库的路径,编译自动生成的文件: 设置路径选项: (一般是在对应工程文件的路径 \tst\database_classb) ...