@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;
}
}