(参考一)https://www.cnblogs.com/wqsbk/p/6884723.html
简介
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": "韦德" }
(参考二)https://www.cnblogs.com/loger1995/p/6366328.html
SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面
导包:
除了一些spring的包之外,还需要jackson-annotations.jar , jackson-core.jar , jackson-databind.jar 这三个包
开启@ResponseBody注解:
在 spring-mvc.xml 中通过<mvc:annotation-driven />开启@ResponseBody注解
使用@ResponseBody标注业务方法
package com.loger.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.loger.entity.User; /** * ResponseBody 注解,可以将如下类型的数据做成json: * 1)基本数据类型,如 boolean , String , int 等 * 2) Map 类型数据 * 3)集合或数组 * 4)实体对象 * 5)实体对象集合 * */ @Controller @RequestMapping("/test") public class JsonController { @RequestMapping("test1.do") @ResponseBody public boolean test1(){ return true; } @RequestMapping("/test2.do") @ResponseBody public Map<String, Object> test2(){ Map<String , Object> map = new HashMap<String ,Object>(); map.put("id", "s20070"); map.put("name", "郑城斌"); return map; } @RequestMapping("/test3.do") @ResponseBody public List<String> test3(){ List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); return list; } @RequestMapping("/test4.do") @ResponseBody public User test4(){ User user = new User(); user.setId("s20068"); user.setName("余清波"); user.setAge(21); return user; } @RequestMapping("/test5.do") @ResponseBody public List<User> test5(){ List<User> list = new ArrayList<>(); User user1 = new User(); user1.setId("s200681"); user1.setName("余清波1"); user1.setAge(21); list.add(user1); User user2 = new User(); user2.setId("s200682"); user2.setName("余清波2"); user2.setAge(21); list.add(user2); User user3 = new User(); user3.setId("s200683"); user3.setName("余清波3"); user3.setAge(21); list.add(user3); return list; } }
输出结果: