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")来获取参数,而@ ...
随机推荐
- Linux、Docker安装Nginx
Docker安装Nginx #docker images nginx #docker search nginx #docker pull nginx #docker run -it -p 8084:8 ...
- windows下共享式服务开发
参考: https://blog.csdn.net/dongyewolong/article/details/8164873 https://blog.csdn.net/qwertyupoiuytr/ ...
- 序列化模块_pickle
序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...
- Robot Framework安装及入门
1. 安装 所有安装文件存放在:\Robotsoft64位文件夹下 1) 安装python2.7.14 a) 双击执行python-2.7.14.msi b) 安装后更改环境变量,添加python的安 ...
- java.lang.Boolean 类源码解析
Boolean源码比较简单. public final class Boolean implements java.io.Serializable, Comparable<Boolean> ...
- C# 文字滚动特效(上下滚动)
本程序改编至网上下载的一个自定义控件,原控件是左右滚动效果,类似于跑马灯效果,由于项目需要,改编为上下滚动. 前期没有实现自动折行,今天刚加上自动折行. using System; using Sys ...
- WPF DEV gridcontrol 自定义计算列(TotalSummary)
/// <summary> /// 自定义计算列 /// </summary> /// <param name="sender"></pa ...
- spring静态注入
与其说是静态注入(IOC),不如讲是对JavaBean 的静态成员变量进行赋值. 一般我们在使用依赖注入的时候,如果当前对象(javaBean )创建(实例化)一次,那么非静态的成员变量也会实例化一次 ...
- mysql导入excel表格
https://jingyan.baidu.com/album/fc07f9891cb56412ffe5199a.html?picindex=1
- 创建Oracle表空间
*分为四步 */ /*第1步:创建临时表空间 */ create temporarytablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\ ...