23.@ResponseBody将返回值写到响应体中,不再是进行逻辑视图解析进行页面跳转

本文详细介绍了在Spring MVC中如何使用@ResponseBody注解处理Ajax请求,讲解了注解的作用、配合JSON转换处理对象,并通过实例展示了如何在控制器中接收和返回各种类型的数据,包括单值、数组、自定义对象和集合。此外,还提到了日期格式化自定义以及Ajax请求和响应的处理流程。
摘要由CSDN通过智能技术生成
@ResponseBody注解使用
作用:把功能处理方法的返回值,作为响应内容放到响应体中
同时结合第三方jar包会将放在响应体中的对象转化为json格式字符串
最终把数据返回给了前端了
该注解用于将处理器中功能处理方法返回的对象,经过转换为指定格式后,写入到Response对象的body数据区(响应正文).
一般返回的数据不是html标签的页面,而是其他某种格式的数据时使用,例如给ajax请求返回json数据.

json2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ request.getContextPath() + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>json2.jsp</title>
<script type="text/javascript"
	src="static/js/jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
	$(function() {
		$("#btn1").on("click",function(){
			var obj = {id:1,name:"tom1",age:20};
			var jsonStr = JSON.stringify(obj);
			$.ajax({
				type : "POST",
				url : "response_body/test1",
				contentType: "application/json",
				data : jsonStr,
				dataType: "json",
				success : function(obj) {
					console.log(obj);
					console.log(obj.id);
					console.log(obj.name);
					console.log(obj.age);
					console.log(obj.dob);
				}
			});
		});
		
		$("#btn2").on("click",function(){
			var obj = {id:1,name:"tom",age:20,dob:"1999-11-11"};
			var jsonStr = JSON.stringify(obj);
			$.ajax({
				type : "POST",
				url : "response_body/test2",
				contentType: "application/json",
				data : jsonStr,
				dataType: "json",
				success : function(obj) {
					console.log(obj);
					console.log(obj.id);
					console.log(obj.name);
					console.log(obj.age);
					console.log(obj.dob);
				}
			});
		});
	});
</script>

</head>
<body>
	<h1>json2.jsp</h1>
	<input id="btn1" type="button" value="测试1">
	<input id="btn2" type="button" value="测试2">
</body>
</html>		
/*
 * @ResponseBody注解使用
 * 作用:把功能处理方法的返回值,作为响应内容放到响应体中
 * 同时结合第三方jar包会将放在响应体中的对象转化为json格式字符串
 * 最终把数据返回给了前端了
 */
@RequestMapping("/response_body")
@Controller
public class ResponseBodyController {
	@ResponseBody  //将返回值写到响应体中,不再是进行逻辑视图解析进行页面跳转
	@RequestMapping(value="/test1",consumes="application/json",produces="application/json")  
	//返回去一个user对象生成的json
	public User test1(@RequestBody User u) {//把生成的返回值生成json串
		System.out.println("ResponseBodyController test1()...");
		System.out.println("u="+u);
		u.setId(10);
		u.setName("郑爽");
		u.setAge(50);
		return u;
	}
	/*
	 * 访问:../springmvc/json2-->跳转到json2.jsp,点击按钮1
	 * 前端传给后台的{id:1,name:"tom1",age:20},之后后台进行修改值后,
	 * 传给前端的是user对象[id=10, name=郑爽, age=50]
	 */
	
	@ResponseBody  //将返回值写到响应体中,不再是进行逻辑视图解析进行页面跳转
	@RequestMapping(value="/test2",consumes="application/json",produces="application/json")  
	//返回去一个user对象生成的json
	public User test2(@RequestBody User u) {//把生成的返回值生成json串
		System.out.println("ResponseBodyController test2()...");
		System.out.println("u="+u);
		u.setId(10);
		u.setName("杨幂");
		u.setAge(50);
		return u;
	}
	/*
	 * 访问:../springmvc/json2-->跳转到json2.jsp,点击按钮2
	 * 前端传给后台的{id:1,name:"tom1",age:20,dob:"1999-11-11"},有日期的
	 * 之后后台进行修改值后,但是没有修改日期,返回给前端
	 * 传给前端的是user对象[id=10, name=杨幂, age=50]
	 * Date类型的前端拿到的是时间戳
	 **********
	 * 这里还是会有日期的问题,就是把user对象放入响应正文返回给客户端后,被转换为了json对象,
	 * 从firebug中可以看出,这个返回的json对象为
	 * {id:10,name:"杨幂",age:50,"dob":1478621620119},
	 * 它默认把dob这个日期对象转为了一个时间戳
	 */
}

如果我们想按照自己的日期格式进行转换,那么需要这样处理:自定义一个json的日期类型格式化类:

public class DateJsonSerializer extends JsonSerializer<Date> {  
	@Override  
	public void serialize(Date value, JsonGenerator jgen,  
			SerializerProvider provider) throws IOException,  
			JsonProcessingException {  
		 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");  
		 String formattedDate = formatter.format(value);  
		 jgen.writeString(formattedDate);  
	}  
} 

在User类中的getDob方法上添加注解

@JsonSerialize(using=DateJsonSerializer.class)
public Date getDob() {
	return dob;
}

///ResponseBody在集合中的使用///

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ request.getContextPath() + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>json_test.jsp</title>
<script type="text/javascript"
	src="static/js/jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
	$(function() {
		
		/*ajax中给Controller中的方法传值*/
		
		//对应JsonTestController中的test1方法
		$("#btn1").on("click", function() {
			$.ajax({
				type : "POST",
				url : "json_test/test1",
				data : "id=1&name=tom&age=20",
				dataType : "text",
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		//对应JsonTestController中的test2方法
		$("#btn2").on("click", function() {
			var arr = [];
			arr.push("hello1");
			arr.push("hello2");
			
			$.ajax({
				type : "POST",
				url : "json_test/test2",
				contentType : "application/json",
				data : JSON.stringify(arr),
				dataType : "text",
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		//对应JsonTestController中的test3方法
		$("#btn3").on("click", function() {
			var arr = [];
			arr.push(101);
			arr.push(102);
			arr.push(103);
			arr.push(104);
			
			$.ajax({
				type : "POST",
				url : "json_test/test3",
				contentType : "application/json", 
				data : JSON.stringify(arr),
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		//对应JsonTestController中的test4方法
		$("#btn4").on("click", function() {
			var obj = {};
			obj.id = 1;
			obj.name = "tom";
			obj.dob = "1999-11-11";

			$.ajax({
				type : "POST",
				url : "json_test/test4",
				contentType : "application/json", 
				data : JSON.stringify(obj),
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//对应JsonTestController中的test5方法
		$("#btn5").on("click", function() {
			var obj1 = {id:1,name:"tom1",dob:"1999-11-11"};
			var obj2 = {id:2,name:"tom2",dob:"1999-11-12"};
			var obj3 = {id:3,name:"tom3",dob:"1999-11-13"};
			var obj4 = {id:4,name:"tom4",dob:"1999-11-14"};

			var arr = [];
			arr.push(obj1);
			arr.push(obj2);
			arr.push(obj3);
			arr.push(obj4);

			$.ajax({
				type : "POST",
				url : "json_test/test5",
				contentType : "application/json", 
				data : JSON.stringify(arr),
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//对应JsonTestController中的test6方法
		$("#btn6").on("click", function() {
			var obj1 = {id:1,name:"tom1",dob:"1999-11-11"};
			var obj2 = {id:2,name:"tom2",dob:"1999-11-12"};
			var obj3 = {id:3,name:"tom3",dob:"1999-11-13"};
			var obj4 = {id:4,name:"tom4",dob:"1999-11-14"};

			var arr = [];
			arr.push(obj1);
			arr.push(obj2);
			arr.push(obj3);
			arr.push(obj4);

			$.ajax({
				type : "POST",
				url : "json_test/test6",
				contentType : "application/json", 
				data : JSON.stringify(arr),
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//对应JsonTestController中的test7方法
		$("#btn7").on("click", function() {

			var arr = [];
			arr.push("hell1");
			arr.push("hell2");
			arr.push("hell3");
			arr.push("hell4");
			arr.push("hell5");

			$.ajax({
				type : "POST",
				url : "json_test/test7",
				contentType : "application/json", 
				data : JSON.stringify(arr),
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//对应JsonTestController中的test8方法
		$("#btn8").on("click", function() {

			var map = {};
			var obj1 = {id:1,name:"tom1",dob:"1999-11-11"};
			var obj2 = {id:2,name:"tom2",dob:"1999-11-12"};
			var obj3 = {id:3,name:"tom3",dob:"1999-11-13"};
			var obj4 = {id:4,name:"tom4",dob:"1999-11-14"};

			map[obj1.name] = obj1;
			map[obj2.name] = obj2;
			map[obj3.name] = obj3;
			map[obj4.name] = obj4;

			$.ajax({
				type : "POST",
				url : "json_test/test8",
				contentType : "application/json", 
				data : JSON.stringify(map),
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//------------------------------------
		
		/*ajax中接收Controller中方法传来的值*/
		
		
		//对应JsonTestController中的test9方法
		$("#btn9").on("click", function() {
			$.ajax({
				type : "POST",
				url : "json_test/test9",
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//对应JsonTestController中的test10方法
		$("#btn10").on("click", function() {
			$.ajax({
				type : "POST",
				url : "json_test/test10",
				dataType : "text", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//对应JsonTestController中的test11方法
		$("#btn11").on("click", function() {
			$.ajax({
				type : "POST",
				url : "json_test/test11",
				dataType : "json", 
				success : function(obj) {
					console.log(obj);
				}
			});
		});
		
		
		//对应JsonTestController中的test12方法
		$("#btn12").on("click", function() {
			$.ajax({
				type : "POST",
				url : "json_test/test12",
				dataType : "json", 
				success : function(obj) {
					console.log(obj);
					console.log(obj.id);
					console.log(obj.name);
					console.log(obj.dob);
				}
			});
		});
		
		
		//对应JsonTestController中的test13方法
		$("#btn13").on("click", function() {
			$.ajax({
				type : "POST",
				url : "json_test/test13",
				dataType : "json", 
				success : function(obj) {
					console.log(obj);
					console.log(obj.length);
					console.log(obj[0]);
					console.log(obj[1]);
					console.log(obj[2]);
					console.log(obj[3]);
				}
			});
		});
		
		
		//对应JsonTestController中的test14方法
		$("#btn14").on("click", function() {
			$.ajax({
				type : "POST",
				url : "json_test/test14",
				dataType : "json", 
				success : function(obj) {
					console.log(obj);
					console.log(obj.length);
					console.log(obj[0]);
					console.log(obj[1]);
					console.log(obj[2]);
					console.log(obj[3]);
				}
			});
		});
		
		
		//对应JsonTestController中的test15方法
		$("#btn15").on("click",function(){
			$.ajax({
			   type: "POST",
			   url: "json_test/test15",
			   dataType: "json",				 
			   success: function(obj){
			   	   console.log(obj);
			   	   console.log(obj.tom1);
			   	   console.log(obj.tom2);
			   	   console.log(obj.tom3);
			   	   console.log(obj.tom4);
			   	   
			   	   $.each(obj,function(i,e){
			   		   console.log(i+" ---> "+e.id+" "+e.name+" "+e.dob);
			   	   });
			   }
			});
		});
		

	});
</script>

</head>
<body>
	<h1>ajax中给Controller中的方法传值</h1>
	<input id="btn1" type="button" value="按钮1-传单值" />
	<input id="btn2" type="button" value="按钮2-传数组" />
	<input id="btn3" type="button" value="按钮3-传数组" />
	<input id="btn4" type="button" value="按钮4-传自定义对象" />
	<input id="btn5" type="button" value="按钮5-传自定义对象数组" />
	<input id="btn6" type="button" value="按钮6-传集合list" />
	<input id="btn7" type="button" value="按钮7-传集合set" />
	<input id="btn8" type="button" value="按钮8-传集合map" />
	
	<hr>
	<h1>ajax中接收Controller中方法返回的值</h1>
	<input id="btn9" type="button" value="按钮9-接收单值"/>
	<input id="btn10" type="button" value="按钮10-接收单值"/>
	<input id="btn11" type="button" value="按钮11-接收数组"/>
	<input id="btn12" type="button" value="按钮12-接收自定义对象"/>
	<input id="btn13" type="button" value="按钮13-接收集合List"/>
	<input id="btn14" type="button" value="按钮14-接收集合set"/>
	<input id="btn15" type="button" value="按钮15-接收集合map"/>


</body>
</html>
package com.briup.web.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.briup.bean.User;
/*
 * 访问的地址:
 * http://127.0.0.1:9999/springmvc/json_test
 * */
@RequestMapping("/json_test")
@Controller
public class JsonTestController {
	/* 接收ajax发送的各种json格式数据 */

	// 接收ajax传来的单值
	@ResponseBody
	@RequestMapping(value = "/test1", method = RequestMethod.POST)
	public String test1(long id, String name, int age) throws Exception {
		System.out.println("JsonTestController test1..");

		System.out.println("id = " + id);
		System.out.println("name = " + name);
		System.out.println("age = " + age);

		return "hello world";
	}

	// 接收ajax传来的数组
	@ResponseBody
	@RequestMapping(value = "/test2", method = RequestMethod.POST)
	public String test2(@RequestBody String[] str) throws Exception {
		System.out.println("JsonTestController test2..");

		System.out.println(java.util.Arrays.toString(str));
		return "hello world";
	}

	// 接收ajax传来的数组
	@ResponseBody
	@RequestMapping(value = "/test3", method = RequestMethod.POST)
	public String test3(@RequestBody long[] ids) throws Exception {
		System.out.println("JsonTestController test3..");

		System.out.println(java.util.Arrays.toString(ids));
		return "hello world";
	}

	// 接收ajax传来的自定义对象
	@ResponseBody
	@RequestMapping(value = "/test4", method = RequestMethod.POST)
	public String test4(@RequestBody User u) throws Exception {
		System.out.println("JsonTestController test4..");

		System.out.println("u = " + u);
		return "hello world";
	}

	// 接收ajax传来的自定义对象数组
	@ResponseBody
	@RequestMapping(value = "/test5", method = RequestMethod.POST)
	public String test5(@RequestBody User[] users) throws Exception {
		System.out.println("JsonTestController test5..");

		System.out.println("users = " + java.util.Arrays.toString(users));
		return "hello world";
	}

	// 接收ajax传来的集合list
	@ResponseBody
	@RequestMapping(value = "/test6", method = RequestMethod.POST)
	public String test6(@RequestBody List<User> users) throws Exception {
		System.out.println("JsonTestController test6..");

		System.out.println("users = " + users);
		return "hello world";
	}

	// 接收ajax传来的集合set
	@ResponseBody
	@RequestMapping(value = "/test7", method = RequestMethod.POST)
	public String test7(@RequestBody Set<String> users) throws Exception {
		System.out.println("JsonTestController test7..");

		System.out.println("users = " + users);
		return "hello world";
	}

	// 接收ajax传来的集合map
	@ResponseBody
	@RequestMapping(value = "/test8", method = RequestMethod.POST)
	public String test8(@RequestBody Map<String, User> map) throws Exception {
		System.out.println("JsonTestController test8..");

		for (String name : map.keySet()) {
			System.out.println(name + " --> " + map.get(name));
		}
		return "hello world";
	}

/*
结果:
	JsonTestController test1..
	id = 1
	name = tom
	age = 20
	JsonTestController test2..
	[hello1, hello2]
	JsonTestController test3..
	[101, 102, 103, 104]
	JsonTestController test4..
	u = User [id=1, name=tom, age=0]
	JsonTestController test5..
	users = [User [id=1, name=tom1, age=0], User [id=2, name=tom2, age=0], User [id=3, name=tom3, age=0], User [id=4, name=tom4, age=0]]
	JsonTestController test6..
	users = [User [id=1, name=tom1, age=0], User [id=2, name=tom2, age=0], User [id=3, name=tom3, age=0], User [id=4, name=tom4, age=0]]
	JsonTestController test7..
	users = [hell5, hell2, hell1, hell4, hell3]
	JsonTestController test8..
	tom1 --> User [id=1, name=tom1, age=0]
	tom2 --> User [id=2, name=tom2, age=0]
	tom3 --> User [id=3, name=tom3, age=0]
	tom4 --> User [id=4, name=tom4, age=0]
*/
	// --------------------------------------

	/* 给ajax返回的各种json格式数据 */

	// 给ajax请求返回单值
	@ResponseBody
	@RequestMapping(value = "/test9", method = RequestMethod.POST)
	public String test9() throws Exception {
		System.out.println("JsonTestController test9..");

		return "hello world";
	}

	// 给ajax请求返回单值
	@ResponseBody
	@RequestMapping(value = "/test10", method = RequestMethod.POST)
	public int test10() throws Exception {
		System.out.println("JsonTestController test10..");

		return 101;
	}

	// 给ajax请求返回数组
	@ResponseBody
	@RequestMapping(value = "/test11", method = RequestMethod.POST)
	public String[] test11() throws Exception {
		System.out.println("JsonTestController test11..");

		return new String[] { "hello1", "hello2", "hello3" };

	}

	// 给ajax请求返回自定义对象
	@ResponseBody
	@RequestMapping(value = "/test12", method = RequestMethod.POST)
	public User test12() throws Exception {
		System.out.println("JsonTestController test12..");

		return new User(1L, "tom", new Date());

	}

	// 给ajax请求返回集合List
	@ResponseBody
	@RequestMapping(value = "/test13", method = RequestMethod.POST)
	public List<User> test13() throws Exception {
		System.out.println("JsonTestController test13..");

		List<User> list = new ArrayList<>();
		list.add(new User(1L, "tom1", new Date()));
		list.add(new User(2L, "tom2", new Date()));
		list.add(new User(3L, "tom3", new Date()));
		list.add(new User(4L, "tom4", new Date()));
		return list;
	}

	// 给ajax请求返回集合set
	@ResponseBody
	@RequestMapping(value = "/test14", method = RequestMethod.POST)
	public Set<String> test14() throws Exception {
		System.out.println("JsonTestController test14..");

		Set<String> set = new HashSet<>();
		set.add("hello1");
		set.add("hello2");
		set.add("hello3");
		set.add("hello4");
		return set;
	}

	// 给ajax请求返回集合map
	@ResponseBody
	@RequestMapping(value = "/test15", method = RequestMethod.POST)
	public Map<String, User> test15() throws Exception {
		System.out.println("JsonTestController test15..");

		Map<String, User> map = new HashMap<>();
		map.put("tom1", new User(1L, "tom1", new Date()));
		map.put("tom2", new User(2L, "tom2", new Date()));
		map.put("tom3", new User(3L, "tom3", new Date()));
		map.put("tom4", new User(4L, "tom4", new Date()));
		return map;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值