springMvc注解之@ResponseBody和@RequestBody详解
程序员文章站
2024-02-13 23:39:16
简介
springmvc对json的前后台传输做了很好封装,避免了重复编码的过程,下面来看看常用的@responsebody和@requestbody注解
添加依赖...
简介
springmvc对json的前后台传输做了很好封装,避免了重复编码的过程,下面来看看常用的@responsebody和@requestbody注解
添加依赖
springmvc对json的处理依赖jackson
<dependency> <groupid>org.codehaus.jackson</groupid> <artifactid>jackson-core-asl</artifactid> <version>1.9.11</version> </dependency> <dependency> <groupid>org.codehaus.jackson</groupid> <artifactid>jackson-mapper-asl</artifactid> <version>1.9.11</version> </dependency>
xml配置
<mvc:annotation-driven />//不要忘了命名空间配置
@responsebody
如果传输的是单层json对象,我们后台可以直接用 @requestparam接收
$.ajax({ type : "post", datatype : "json", url : "/testrequestbody", data:{ name:"韦德", age:35 }, success : function(result) { } });
@requestmapping("/testrequestbody") public string testrequestbody(@requestparam map<string, object> map) { system.out.println(map);// {name=韦德, age=35} return "index"; }
如果传输的是多层嵌套json对象,这个时候会就会出现数据丢失问题
@responsebody很好的解决了这个问题,它会把前台传输过来的json转化为后台对应的对象
$.ajax({ type : "post", datatype : "json", url : "/testrequestbody", contenttype:"application/json", data:json.stringify({ name:"韦德", win:[2006,2012,2013], age:35 }), success : function(result) { } });
@requestmapping("/testrequestbody") public string testrequestbody(@requestbody map<string, object> map) { system.out.println(map);//{name=韦德, win=[2006, 2012, 2013], age=35} return "index"; }
需要注意的是前台需要指定contenttype为"application/json"
同时要把json对象转化为string,否则后台不能识别
@responsebody
ajax请求返回json格式,往常我们可以这样做
private void writejson(httpservletresponse response, object object) { string json = json.tojsonstring(object); response.setcharacterencoding("utf-8"); response.setcontenttype("application/json; charset=utf-8"); printwriter out = null; try { out = response.getwriter(); out.write(json); } catch (ioexception e) { e.printstacktrace(); } finally { if (out != null) { out.close(); } } }
这个时候 @responsebody就派上用场了,只需要一个注解,全部搞定
$.ajax({ type : "post", datatype : "json", url : "/testresponsebody", success : function(result) { console.info(result); } });
@requestmapping("/testresponsebody") @responsebody public map<string, object> testrequestbody() { map<string, object> result = new hashmap<string, object>(); result.put("name", "韦德"); result.put("age", 35); return result; }
前台console输出
{ "age": 35, "name": "韦德" }
总结
在网上看到很不错的流程图,作为总结吧
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
springMvc注解之@ResponseBody和@RequestBody详解
-
@ResponseBody 和 @RequestBody 注解的区别
-
@ResponseBody 和 @RequestBody 注解的区别
-
SpringMVC注解之@ResponseBody注解原理
-
springmvc注解RequestBody和ResponseBody
-
bytebuddy之advice详解和注解详解
-
@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别
-
springmvc入门基础之注解和参数传递
-
bytebuddy之advice详解和注解详解
-
SpringBoot 中常用注解@PathVaribale/@RequestParam/@RequestBody/@ResponseBody详解介绍