在Spring中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面。
@ResponseBody注解使用步骤
实现此案例需要按照如下步骤进行。
步骤一:导包
复制项目SpringUnit02,创建新项目SpringUnit03,然后在新项目中导入如下的包:
完成之后,项目包结构如下图:
图-1
步骤二:开启@ResponseBody注解
在applicationContext.xml中通过<mvc:annotation-driven />开启@ResponseBody注解,由于在配置Spring MVC时已经增加了这段配置,因此这个步骤可以省略了。
步骤三:使用@ResponseBody标注业务方法
创建业务控制器JsonController,用于演示@ResponseBody的多种用法,该注解可以将如下类型的数据做成json:
JsonController代码如下:
package com.tarena.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.tarena.entity.Emp; @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", 16); map.put("name", "刘备"); return map; } @RequestMapping("/test3.do") @ResponseBody public List<String> test3() { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); return list; } @RequestMapping("/test4.do") @ResponseBody public Emp test4() { Emp e = new Emp(); e.setEmpno(1); e.setEname("刘苍松"); e.setJob("老师"); e.setMgr(1); e.setSal(10000.0); e.setDeptno(30); return e; } @RequestMapping("/test5.do") @ResponseBody public List<Emp> test5() { List<Emp> list = new ArrayList<Emp>(); Emp e1 = new Emp(); e1.setEmpno(1); e1.setEname("aaa"); e1.setJob("aaa"); e1.setMgr(1); e1.setSal(10000.0); e1.setDeptno(30); list.add(e1); Emp e2 = new Emp(); e2.setEmpno(1); e2.setEname("bbb"); e2.setJob("bbb"); e2.setMgr(1); e2.setSal(20000.0); e2.setDeptno(30); list.add(e2); Emp e3 = new Emp(); e3.setEmpno(1); e3.setEname("ccc"); e3.setJob("ccc"); e3.setMgr(1); e3.setSal(30000.0); e3.setDeptno(30); list.add(e3); return list; } }
步骤四:测试
部署项目并启动tomcat,打开浏览器,依次访问JsonController中的业务方法,效果如下图:
访问test1.do效果如下图:
图-2
访问test2.do效果如下图:
图-3
访问test3.do效果如下图:
图-4
访问test4.do效果如下图:
图-5
访问test5.do效果如下图:
图-6
本案例的完整代码如下所示:
JsonController完整代码如下:
package com.tarena.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.tarena.entity.Emp; @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", 16); map.put("name", "刘备"); return map; } @RequestMapping("/test3.do") @ResponseBody public List<String> test3() { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); return list; } @RequestMapping("/test4.do") @ResponseBody public Emp test4() { Emp e = new Emp(); e.setEmpno(1); e.setEname("刘苍松"); e.setJob("老师"); e.setMgr(1); e.setSal(10000.0); e.setDeptno(30); return e; } @RequestMapping("/test5.do") @ResponseBody public List<Emp> test5() { List<Emp> list = new ArrayList<Emp>(); Emp e1 = new Emp(); e1.setEmpno(1); e1.setEname("aaa"); e1.setJob("aaa"); e1.setMgr(1); e1.setSal(10000.0); e1.setDeptno(30); list.add(e1); Emp e2 = new Emp(); e2.setEmpno(1); e2.setEname("bbb"); e2.setJob("bbb"); e2.setMgr(1); e2.setSal(20000.0); e2.setDeptno(30); list.add(e2); Emp e3 = new Emp(); e3.setEmpno(1); e3.setEname("ccc"); e3.setJob("ccc"); e3.setMgr(1); e3.setSal(30000.0); e3.setDeptno(30); list.add(e3); return list; } }