SpringMVC框架之处理json格式数据(注解ResponseBody和RequestBody)

在上一篇博客 SpringMVC框架之前后端数据交互(附Demo)演示了在SpringMVC框架中如何进行前后端的数据交互,在本篇博客将介绍SpringMVC框架中如何以Json格式的数据进行前后端的交互。

关于项目创建,直接下载前一篇博客的Demo源码 SpringMVC框架之前后端数据交互(附Demo),这里不再复述了。
由于需要使用Ajax、处理Json格式数据,请先导入jQuery、Jackson依赖。
在这里插入图片描述
我这里导入的是旧版,你可以去它官网下载最新版https://jquery.com/download/
在这里插入图片描述
导入Jackson相关的依赖到项目
下载地址:https://www.jb51.net/softs/570453.html
在这里插入图片描述
这里我也没试有没有多余的包,你可以尝试精简导入。
在这里插入图片描述

在这里插入图片描述
修改DispatcherServlet-servlet.xml文件,添加jackson转换器。

<!-- 3.配置注解处理适配器来执行控制器的方法 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
    </property>
</bean>

1、前端发送json格式数据给后端

新建Student实体类
在这里插入图片描述

package cn.hestyle.demo.entity;

/**
 * description: Student实体类(简化)
 *
 * @author hestyle
 * @version 1.0
 * @className SpringMVC_demo_01->Student
 * @date 2020-01-28 21:36
 **/
public class Student {
    /**学号*/
    private String studentNo;
    /**密码*/
    private String password;

    /**
     * jackson需要无参构造方法,所以手动提供一个
     */
    public Student() {
    }

    public String getStudentNo() {
        return studentNo;
    }

    public void setStudentNo(String studentNo) {
        this.studentNo = studentNo;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Student{" +
                "studentNo='" + studentNo + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

新建StudentController控制器,添加register方法。
在这里插入图片描述

package cn.hestyle.demo.web.controller;

import cn.hestyle.demo.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * description: Student控制器
 *
 * @author hestyle
 * @version 1.0
 * @className SpringMVC_demo_01->StudentController
 * @date 2020-01-28 19:02
 **/
@Controller
@RequestMapping("student")
public class StudentController {
    @RequestMapping("toRegister.do")
    public String toRegister() {
        //跳转到view/student/register.jsp页面
        return "/student/register";
    }

    @RequestMapping("register.do")
    public String register(@RequestBody Student student) {
        //使用@RequestBody注解,前端提交的json格式的字符串会自动被转换为student对象
        System.err.println(student);
        //不跳转任何界面
        return null;
    }
}

添加student/register.jsp
在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: hestyle
  Date: 2020/1/28
  Time: 21:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Student注册</title>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script>
    <script>
        function register() {
            //使用选择器,获取表单里的参数
            var studentNo = $("input[name='studentNo']").val();
            var password = $("input[name='password']").val();
            //封装成json格式
            var jsonObj = {studentNo:studentNo, password:password};
            //转换成字符串(不能直接发送json对象!!!)
            var dataStr = JSON.stringify(jsonObj);
            //使用ajax.post方式,以application/json格式发送数据给后端
            $.ajax({
                url:'${pageContext.request.contextPath}/student/register.do',
                type : 'POST',
                data : dataStr,
                contentType : 'application/json;charset=utf-8',
                success : function (respData) {
                	//当请求响应成功,控制台输出放回的数据respData
                    console.info(respData);
                }
            });
        }
    </script>
</head>
<body>
    <form id="studentForm">
        学号:<input type="text" name="studentNo"><br>
        密码:<input type="text" name="password"><br>
        <input type="button" value="注册" onclick="register();">
    </form>

</body>
</html>

浏览器访问student/toRegister.do路径
在这里插入图片描述
控制台输出信息:
在这里插入图片描述

2、后台给前端返回json格式数据

修改studnetController.register方法,在返回值前添加@ResponseBody注解
在这里插入图片描述

@RequestMapping("register.do")
public @ResponseBody Student register(@RequestBody Student student) {
    //使用@RequestBody注解,前端提交的json格式的字符串会自动被转换为student对象
    System.err.println(student);
    //方法返回值使用了@ResponseBody注解,jackson转换器会将返回的对象转为json字符串返回前端(并不是返回页面了!)
    return student;
}

重新部署项目后,再次访问student/toRegister.do
在这里插入图片描述
在这里插入图片描述
使用注解@RequestBody需要注意的地方是,前端必须以post方式,json格式提交json格式的字符串数据, j s o n \color{red}不能直接提交json对象! 并且json字符串中的各属性名与需要与封装的实体类属性一一对应!

使用注解@ResponseBody貌似没啥注意点,直接加在方法返回值前就行。

Demo源码下载地址:
地址一:https://pan.baidu.com/s/1mIAZ-duPg-is3i48hWzUwA 提取码: qddp
地址二:https://pan.baidu.com/s/1488OeA8Y9rlKGsH-9sdhlQ 提取码: xs1k
地址三:https://pan.baidu.com/s/1VYSyXTCAmBPvxx8IypdB6A 提取码: p7j9

以上就是SpringMVC框架之处理json格式数据主要内容。

发布了976 篇原创文章 · 获赞 230 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/104102332
今日推荐