SpringMVC系列教程——10接收与响应json数据格式

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多视图配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值