当返回值是多个参数(用的比较普遍),返回类型改为List集合,其他不变
@RequestMapping(value ="returnStudentJsonArray.do" )
@ResponseBody
public List<Student> doStudentJsonObjectArray(String name,Integer age){
List<Student> list = new ArrayList<>();
Student student = new Student();
student.setName("wangwu");
student.setAge(22);
list.add(student);
student = new Student();
student.setName("tianmao");
student.setAge(10);
list.add(student);
return list;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
前端页面 index.jsp ,返回 json 格式为:[{“name”:“wangwu”,“age”:22},{“name”:“tianmao”,“age”:10}]
<head>
<title>Title</title>
<script type="text/javascript" src="js/jquery-3.5.1.js"></script>
<script type="text/javascript">
$(function () {
$("button").click(function () {
// alert("button click");
$.ajax({
// url:"returnVoid-ajax.do",
// url:"returnStudentJson.do",
url:"returnStudentJsonArray.do",
data:{
name:"zhangsan",
age:20
},
type:"post",
dataType:"json",
success:function(resp) {
// alert(resp.name+" "+resp.age);
//[{"name":"wangwu","age":22},{"name":"tianmao","age":10}]
$.each(resp,function (i,n) {
alert(n.name+" "+n.age);
})
}
})
})
})
</script>
</head>
处理器方法返回的是 String,表示数据,不是视图
/*
* 处理器方法返回的是String,String表示数据的,不是视图。
* 区分返回值类型String是数据,还是视图,看看有没有@ResponseBody注解
* 如果有@ResponseBody注解,返回String就是数据,反之就是视图
* */
@ResponseBody
public String doStringData(String name,Integer age){
return "返回对象,表示数据";
}
springmvc 处理器方法返回 object,可以转为 json输出到浏览器,响应 ajax 的内部原理
1 <mvc:annotation-driven> 注解驱动
注解驱动实现的功能是:完成java对象到 json,xml,test,二进制等数据格式的转换
HttpMessageConverter接口:消息转换器
功能:定义了java转json,xml等数据格式的方法。这个接口有很多实现类
这些实现类完成了java对象到json,Java对象到xml,Java对象到二进制数据的转换
2 HttpMessageConverter接口的两个方法是:控制器类把结果输出给浏览器时使用的
boolean canWrite(Class<?> var1, @Nullable MediaType var2);
void write(T var1, @Nullable MediaType var2, HttpOutputMessage var3)
1) canWrite:检查处理器方法返回值,能不能转为var2的数据格式
2) write:把处理器方法的返回值对象,调用jackson中的ObjectMapper转为json字符串
3 ResponseBody 注解
放在处理器方法的上面,通过HttpServletResponse输出结果,响应ajax请求