目录

1. 关于JSON

1.1 JSON简介

1.2 JSON语法

1.3 JSON两种结构

2. 关于@RequestBody注解

2.1 没有该注解的情况

2.2 使用该注解后的情况

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


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

但在实际开发中,使用以上方式进行传参的扩展性非常差(对象相比而言稍强),当需求发生变更时,就需要修改接口;

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

1. 关于JSON

1.1 JSON简介

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

在Servlet部分前端POST请求使用json向后端传参时就曾提到过json,

2. 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请求并发送,详情如下:

文件入参 java java入参必传_文件入参 java

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

文件入参 java java入参必传_java-ee_02

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

文件入参 java java入参必传_JSON_03

并未将在请求中构造的该数据构成一个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请求并发送,详情如下:

文件入参 java java入参必传_JSON_04

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

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

(2)要求构造的请求的Body部分的参数必须符合json字符串的格式要求,不能写成key-value格式;


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

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

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

在开发中尽量新增而非修改代码,是大型开发中的重要思想,JSON格式与对象的使用最为频繁。