本篇文章讲述对JSON数据的处理,关于响应的处理可以看我第二篇文章
链接地址:https://segmentfault.com/a/11...

前期准备

使用环境

  • JDK:1.8
  • Tomcat:9.0.3
  • Spring:5.2.8
  • Maven:3.6.3
  • 编译器:IntelliJ IDEA 2019

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
 version="4.0">
     
     <servlet> 
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param> 
            <param-name>contextConfigLocation</param-name>
        <param-value>classpath:ApplicationContext.xml</param-value>
        </init-param> 
    </servlet>
    <servlet-mapping> 
        <servlet-name>mvc</servlet-name>
        <url-pattern>*.do</url-pattern>
     </servlet-mapping>
</web-app>

ApplicationContext.xml配置(Spring核心配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 开启spring注解驱动-->
     <context:component-scan base-package="com.cjh"/>
    <!-- 开启mvc注解驱动-->
     <mvc:annotation-driven></mvc:annotation-driven>
</beans>

JSON数据的处理

浏览器通过ajax发送JSON数据

点击button,发送JSON数据

<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>cai jin hong</title>
 <script type="text/javascript">
 window.onload = function () {
            document.getElementById("button").onclick = function () {
                //1、创建一个AJAX对象
 var xhr = new XMLHttpRequest();
 xhr.open("POST", "test.do", true);
 //告知浏览器发送的是什么信息
 xhr.setRequestHeader("Content-type", "application/json;charset=UTF-8");
 //2、随时监听响应回来的数据
 xhr.onreadystatechange = function () {
                    if (xhr.readyState == 4 && xhr.status == 200){
                        alert(xhr.responseText);
 }
                }
                //3、发送JSON数据
 xhr.send('{"account":"2020", "password": "123456", "balance":98}');
 }
        }
    </script>
</head>
<body>
 <button id="button">测试JSON数据</button>
</body>
</html>

服务器接收JSON数据

  • 注意:需要引入jackson-core、jackson-databind和jackson-annotations包
  • 使用@RequestBody注解,表明接收的参数是JSON格式的,如果发送的JSON对象的key名字刚好是实体对象的属性名字,那么只要我们的方法参数写的是实体对象类型,mvc会包装成我们要求的类型
  • 代码如下:
@Controller
public class UserController {
    //方法中传入实体对象:对象里面有list集合
 @RequestMapping("test.do")
    public void testFive(@RequestBody User user){
        System.out.println(user);
 }
}

服务器响应JSON数据

  • 注意:需要引入jackson-core、jackson-databind和jackson-annotations包
  • 响应实体对象:使用@ResponseBody注解,直接返回实体对象(mvc会把它转换成JSON格式的数据)

    • 代码如下:
    @Controller
    public class UserController {
        //方法中传入实体对象:对象里面有list集合
        @RequestMapping("test.do")
        @ResponseBody
        public User testFive(User user){
            System.out.println(user);
            return user;
        }
    }
  • 不论是响应Map、list还是Set集合,都是一样的用法
  • 如果是返回String,并且搭配@ResponseBody,那么是直接相应会给浏览器,而不是转发/重定向

cing_self
18 声望3 粉丝