【JavaEE】_Spring MVC项目之使用JSON传参

发布于:2024-03-29 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

1. 关于JSON

1.1 JSON简介

1.2 JSON语法

1.3 JSON两种结构

2. 关于@RequestBody注解

2.1 没有该注解的情况

2.2 使用该注解后的情况

关于MVC项目前后端传参数据类型选择的总结:


在本专栏中已经介绍过关于Spring MVC项目传参的常见方式:

单个或多个参数:

【JavaEE】_Spring MVC 项目单个及多个参数传参-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63299495/article/details/136436410对象传参:

【JavaEE】_Spring MVC项目之使用对象传参-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63299495/article/details/136513718数组或集合传参:

【JavaEE】_Spring MVC项目使用数组与集合传参-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63299495/article/details/136489044但在实际开发中,使用以上方式进行传参的扩展性非常差(对象相比而言稍强),当需求发生变更时,就需要修改接口;

注意此处的接口与SE阶段的interface不同,而是指API,是应用程序提供的服务,接口对应在代码上通常是指方法;

1. 关于JSON

1.1 JSON简介

1. JSON即JavaScript Object Notation,JavaScript对象表示法;

在Servlet部分前端POST请求使用json向后端传参时就曾提到过json,原文链接如下:

【JavaEE】_前端POST请求使用json向后端传参-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63299495/article/details/1362865772. json就是一种数据格式,使用文本表示一个对象或数组的信息;

3. json本质是一个表示对象的字符串,负责在不同的语言中进行数据的传递和交换;

1.2 JSON语法

1. 数据在键值对(key-value)中,其中key必须为字符串(需用引号括起来)

2. 键与值用冒号分割,数据用逗号分隔;

3. 对象用{ }表示,数组用[ ]表示

4. 值可以为对象,也可以为数组,数组中可以包含多个对象;

1.3 JSON两种结构

1. 对象:大括号{ }保存的对象是一个无序的键值对集合;

2. 数组:中括号[ ]保存的数组是值(value)的有序集合;

2. 关于@RequestBody注解

2.1 没有该注解的情况

现令.java文件内容如下:

package com.example.demo.controller;

import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RequestMapping("/Para")
@RestController
public class ParaController {
    @RequestMapping("/M8")
    public String m8(Person person){
        return "Parameters have received: \n"
                + person.toString();
    }
}

运行启动类后,使用postman构造HTTP请求并发送,详情如下:

注意在默认情况下,使用对象进行传参时,默认请求数据组织形式为key-value形式,会使用key和属性进行匹配,比如,在请求的query string部分显式标明key-value形式参数,此时再进行发送:

可使用fiddler抓包查看HTTP请求详情:

并未将在请求中构造的该数据构成一个Person对象。

需要实现预期效果,需要使用@RequestBody属性;

2.2 使用该注解后的情况

@RequestBody [对象类型] [对象名]表示将请求的正文转成这个对象

现令.java文件内容如下:

package com.example.demo.controller;

import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RequestMapping("/Para")
@RestController
public class ParaController {
    @RequestMapping("/M8")
    public String m8(@RequestBody Person person){
        return "Parameters have received: \n"
                + person.toString();
    }
}

运行启动类后,再次构造HTTP请求并发送,详情如下:

即:若前后端传参传递的是JSON数据,需要使用@RequestBody注解;

但请注意JSON只能作为请求正文,不能作为参数的一部分(如QueryString部分某属性的值设置为JSON格式是不可以的),整个请求的正文都会被转换为一个对象


关于MVC项目前后端传参数据类型选择的总结:

1. 在实际开发中,使用最多的数据格式为JSON, 即使是单个参数,大多数情况下也是使用JSON的对象,只是仅有一个属性;

2. 在少数情况下,如果仅通过一个属性(比如id)就可以获取到想要的请求信息,就可以使用单个对象传参;

在开发中尽量新增而非修改代码,是大型开发中的重要思想。

本文含有隐藏内容,请 开通VIP 后查看