SprignMVC——返回JSON与Ajax支持

为了便于接收和处理Ajax请求,SpringMVC提供了JSON响应的支持,可以很方便地将数据自动转换成JSON格式的字符串给客户端JavaScript返回。

在Spring MVC中,与JSON响应相关的注解为@ResponseBody

 

@ResponseBody应用

@ResponseBody注解主要用于Controller组件的处理方法前,具体使用方法如下:

1,引入jar包

jackson-annotations-2.4.1.jar

jackson-core-2.4.1.jar

jackson-databind-2.4.1.jar

2,在Spring配置文件中定义<mvc:annotation-driver/>,开启对@ResponseBody的支持

 

3,在Controller处理方法前定义@ResponseBody注解

下面看看@ResponseBody应用案例

1)返回单个值

2)返回多个值

3)返回对象

4)返回集合

5)返回对象集合

/**
 *	演示Spring对异步请求的处理,
 *	如何将数据做成json输出给客户端。
 */
@Controller
@RequestMapping("/test")
public class JsonController {
	/**
	 * 使用@ResponseBody注解声明该方法处理的是异步请求,
	 * Spring会自动的将返回值做成json输出给客户端。
	 */
	@RequestMapping("/test1.do")
	@ResponseBody
	public boolean test1() {
		//如果返回的是基本类型的数据,
		//Spring会直接将值输出给客户端。
		//即true
		return true;
	}
	
	/**
	 * 将Map做成json输出
	 */
	@RequestMapping("/test2.do")
	@ResponseBody
	public Map<String, Object> test2() {
		Map<String,Object> map = 
			new HashMap<String, Object>();
		map.put("success", true);
		map.put("message", "操作成功.");
		//{"success":true,"message":"操作成功."}
		return map;
	}
	
	/**
	 * 将集合做成json输出
	 */
	@RequestMapping("/test3.do")
	@ResponseBody
	public List<Object> test3() {
		List<Object> list = new ArrayList<Object>();
		list.add("Tarena");
		list.add("JSD1407");
		//["Tarena","JSD1407"]
		return list;
	}
	
	/**
	 * 将实体对象做成json输出
	 */
	@RequestMapping("/test4.do")
	@ResponseBody
	public Emp test4() {
		Emp e = new Emp();
		e.setEmpno(1);
		e.setEname("zs");
		e.setJob("营业员");
		e.setSal(3000.0);
		//{"empno":1,"ename":"zs","job":"营业员"...}
		return e;
	}
	
	/**
	 * 将一组对象做成json输出
	 */
	@RequestMapping("/test5.do")
	@ResponseBody
	public List<Emp> test5() {
		List<Emp> list = new ArrayList<Emp>();
		Emp e = new Emp();
		e.setEmpno(1);
		e.setEname("zs");
		e.setJob("营业员");
		e.setSal(3000.0);
		list.add(e);
		Emp e2 = new Emp();
		e2.setEmpno(2);
		e2.setEname("ls");
		e2.setJob("经理");
		e2.setSal(5000.0);
		list.add(e2);
		//[{"empno":1,"ename":"zs","job":"营业员"...},
		//{"empno":2,"ename":"ls","job":"经理"...}]
		return list;
	}
}

jsp页面引入JQuery插件,就可以发送Ajax请求了。

$.post(
            		"searchEmp.do",
            		{"empNo":emp_no},
            		function(data) {
            			if(data=="") {
            				//没有查询到员工
            				$("#emp_msg").text("不存在此员工.").addClass("error_msg");
            			} else {
            				//查询到了员工
            				$("#emp_msg").text("员工有效.").removeClass("error_msg");
            				$("#emp_id").val(data.account_id);
            			}
            		}
            	);
 

Controller代码

@RequestMapping("/searchEmp.do")
	@ResponseBody
	public Account searchEmp(String empNo) {
		return empDao.findByEmpNo(empNo);
	}
 

相关推荐