SpringMVC 之 @ResponseBody 和 @RequestBody
前后端进行数据交互的时候,规定数据交互的格式,使数据交互规范而统一,是极为重要的事。一般而言,我们会采用 JSON 进行数据交互。本文暂不讨论如何 JSON 的格式规范,而是解析一下如何在 SpringMVC 中方便快捷的使用 JSON 进行数据交互。那就是使用两大注解: @ResponseBody 和 @RequestBody 。
pom.xml
我采用 Maven 来管理构建项目,要使用 @ResponseBody 和 @RequestBody ,要先在 pom.xml 里引入 jackson 依赖包。
<!--JSON交互-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.2</version>
</dependency>
额,至于 SpringMVC 具体使用哪个版本就需要你自己选择了。
开启 < mvc:annotation-driven />
为什么要开启 < mvc:annotation-driven /> ?
相当于注册了 DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 两个 bean ,配置一些 messageconverter 。即解决了 @Controller 注解的使用前提配置。而我们在使用 SpringMVC 时,一定会用到 @Controller 注解,如果没有 < mvc:annotation-driven/> ,那么所有的 Controller 可能就没有解析。
Java 代码示例
实体类:
public class User {
private String name;
private int id;
public String getName() { return name;}
public void setName(String name) { this.name = name;}
public int getId() { return id;}
public void setId(int id) { this.id = id;}
}
Controller:
@Controller
@RequestMapping("/json")
public class Controller { //仅发送 JSON ,即仅使用 @ResponseBody 注解
@RequestMapping("/justResponse")
@ResponseBody
public Map<String, Object> justResponse(Model model) throws Exception {
Map<String, Object> map =new HashMap<String, Object>();
User user = new User();
user.setName("Test");
user.setId(123);
map.put("string", "string");
map.put("user", user);
return map;
} //仅接收 JSON ,即仅使用 @RequestBody注解
@RequestMapping("/justRequest")
public User justRequest(@RequestBody User user) throws Exception {
System.out.println("This is " + user.name);
return user;
} //收发 JSON ,即使用 @ResponseBody 和 @RequestBody
@RequestMapping("/responseAndRequest")
@ResponseBody
public Map<String, Object> responseAndRequest(@RequestBody User user) throws Exception {
System.out.println("This is " + user.name);
Map<String, Object> map =new HashMap<String, Object>();
map.put("string", "string");
map.put("user", user);
return map;
}
}
之所以会有 Map< String, Object > ,是因为数据交互时会存在多个对象,这样可能更贴合实际。以及还有一点,确保数据格式为 JSON ,不过使用 XML 也可以,以上两个注解也支持 XML 。
SpringMVC 之 @ResponseBody 和 @RequestBody的更多相关文章
- springMVC的@ResponseBody、@RequestBody使用需要注意的地方
springMVC我觉得比struts2好的其中一个原因就是可以使用注解解析json数据,方便快捷.但是,即使如此,还是有需要注意的地方. 1.返回的地方设置@ResponseBody,请求的对象参数 ...
- springMvc注解之@ResponseBody和@RequestBody
简介 springmvc对json的前后台传输做了很好封装,避免了重复编码的过程,下面来看看常用的@ResponseBody和@RequestBody注解 添加依赖 springmvc对json的处理 ...
- SpringMVC @ResponseBody和@RequestBody使用
@ResponseBody用法 作用: 该注解用于将Controller的方法返回的对象,根据HTTP Request Header的Accept的内容,通过适当的HttpMessageConvert ...
- 转-Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
转-http://snowolf.iteye.com/blog/1628861/ Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariab ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- @ResponseBody,@RequestBody,@PathVariable
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- 解决SpringMVC的@ResponseBody返回中文乱码
SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.conve ...
- [转]SpringMVC使用@ResponseBody时返回json的日期格式、@DatetimeFormat使用注意
一.SpringMVC使用@ResponseBody时返回json的日期格式 前提了解: @ResponseBody 返回json字符串的核心类是org.springframework.http.co ...
随机推荐
- 乘风破浪:LeetCode真题_022_Generate Parentheses
乘风破浪:LeetCode真题_022_Generate Parentheses 一.前言 关于括号的题目,我们已经遇到过了验证正确性的题目,现在让我们生成合法的括号列表,怎么办呢?想来想去还是递归比 ...
- SNMP协议利用
1.安装snmp服务 2.配置snmp服务 运行Services.msc 添加社区public,只读 启动服务 3.在kali运行 Snmpwalk -c public -v 2c IP 即可查看目标 ...
- css选择器补充
前面文章总结了常用的8种选择器,今天再来补充5中选择器,其中一部分是css3中新加入的. 1.相邻选择器 E+F { sRules } 相邻选择符只会命中符合条件的相邻的兄弟元素. 2.兄弟选择器 E ...
- Spring-IOC 扩展点 BeanFactoryPostProcessor及其子接口解析
BeanFactoryPostProcessor 接口的英文描述: Allows for custom modification of an application context's bean de ...
- BZOJ3787:Gty的文艺妹子序列(分块,树状数组)
Description Autumn终于会求区间逆序对了!Bakser神犇决定再考验一下他,他说道: “在Gty的妹子序列里,某个妹子的美丽度可也是会变化的呢.你还能求出某个区间中妹子们美丽度的逆序对 ...
- 关于Netty Pipeline中Handler的执行顺序问题
原文地址:http://blog.csdn.net/wgyvip/article/details/25637651 最近在学习Netty框架,根据官网的教程学着做了几个小测试,都成功了,后面开始试着写 ...
- mysql 压缩备份 压缩还原 命令
.mysqldump 备份并压缩sql文件 mysql>mysqldump -h主机ip -u用户名 -p密码(也可不输入) 数据库名 | gzip > 压缩后文件位置 .mysql直接用 ...
- nodeJS-使用buffer类处理二进制数据
使用buffer类处理二进制数据 在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持.然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据.因此在node ...
- Apple 相关官方地址
https://developer.apple.com/download/more/ 证书制作地址: https://developer.apple.com/account/ios/profile/ ...
- HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...