SpringMVC系列教程——10接收与响应json数据格式
本章我们讲解@ResponseBody
和@RequestBody
两个注解。需要继续导入jar
包
链接:https://pan.baidu.com/s/1OR-s_JjYsNkCZX7khZCW2Q
提取码:rfug
上一篇:SpringMVC系列教程——09转发与重定向及@RequestParam讲解
下一篇:SpringMVC系列教程——11多视图配置
一.简介
@ResponseBody
把后台pojo转换json对象,返回到页面。
@RequestBody
接受前台json数据,把json数据自动封装javaBean。
二.应用
1.添加数据格式转换配置
首先我们需要将DispatcherServlet-servlet.xml
里面配置适配器的时候加上下面配置。
红框内容如下:
<!--配置jackson的转换器,告诉springMVC使用jackson这个这个包来转换-->
<property name="messageConverters">
<!--这里由于只指定了一个类,所以其实这个list标签是可以省略的-->
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</list>
</property>
2.创建StudentController
@Controller
@RequestMapping("stu")
public class StudentController {
@RequestMapping("register")
public String toReg(){
return "student/register";
}
@RequestMapping("save")
public String save(Student stu, Model model){
model.addAttribute("stu",stu);
System.out.println(stu);
return "student/StudentInfo";
}
}
3.创建Student类
public class Student {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", number=" + number +
'}';
}
private String name;
private int number;
}
4.可以提交json数据的jsp页面register.jsp
推荐文章:Jquey实现Ajax
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册学生档案</title>
<script src="../js/jquery-3.3.1.min.js"></script>
</head>
<body>
<form method="post">
姓名:<input id="name" type="text" name="name"><br>
学号:<input id="number" type="text" name="number"><br>
<input id="submit" type="button" value="提交JSON数据" onclick="register();">
</form>
<script>
var register = function () {
var name = $("#name").val();
var number = $("#number").val();
var prmts = {"name":name,"number":number};
//将json对象转化为字符串
var jsonObj = JSON.stringify(prmts);
alert(jsonObj)
var url = "${pageContext.request.contextPath}/stu/save.do";
$.ajax({
type:'post',
url:url,
data:jsonObj,
success:function (respData) {
document.write(respData)
},
error:function(){
alert("出错了")
},
contentType:"application/json;charset=utf-8"
}
)
}
</script>
</body>
</html>
5.注册成功后的StudentInfo.jsp
页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册成功</title>
</head>
<body>
姓名:${stu.name}<br>
学号:${stu.number}
</body>
</html>
接下来我们访问http://localhost:8080/stu/register.do
结果:
结果我们发现输出的stu
对象的各个属性为null
,并且弹出错误。我们分析一下,我们在点击提交后,我们的json
格式的字符串{name:“jack”,number=123456}被传送到save()方法,但是我们的Student对象没法成功转化,因此其属性被注入空,从而引起了错误。
@RequestMapping("save")
public String save(Student stu, Model model){
model.addAttribute("stu",stu);
System.out.println(stu);
return "student/StudentInfo";
}
我们需要这样做:
@RequestBody
可以把json数据转成模型对象(即Student
对象)
我们再次测试:
那么接下来@ResonseBody
的作用就是把把对象转换为json对象
返回客户端。
save()
方法修改为下面内容:
再次测试:
上面是[Object,Objiect]
,如果想打印json
格式,可以这么做
这里需要注意一下:发送数据的时候需要JSON.stringfy
来转换一下为json
格式,否则报错,而返回的时候是对象,要想打印json
格式也需要JSON.stringfy
来转换一下为json
格式。
上一篇:SpringMVC系列教程——09转发与重定向及@RequestParam讲解
下一篇:SpringMVC系列教程——11多视图配置