postman传入复杂参数

一、五种类型参数传递

1.普通参数

2.POJO类型参数

3.嵌套POJO类型参数

4.数组类型参数

1.1普通参数

普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数。

如果形参与地址参数名不一致该如何解决?

发送请求与参数:

http://localhost/commonParamDifferentName?name=张三&age=18

后台接收参数:

1
2
3
4
5
6
7
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(String userName , int age){
System.out.println("普通参数传递 userName ==> "+userName);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param different name'}";
}

解决方案:使用@RequestParam注解

1
2
3
4
5
6
7
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name") String userName , int age){
System.out.println("普通参数传递 userName ==> "+userName);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param different name'}";
}

1.2 POJO类型参数

简单数据类型一般处理的是参数个数比较少的请求,如果参数比较多,那么后台接收参数的时候就比较复杂,这个时候我们可以考虑使用POJO数据类型。

  • POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

  • 此时需要使用前面准备好的POJO类,先来看下User

    public class User {
    private String name;
    private int age;
    //setter…getter…略
    }

发送请求和参数:

后台接收参数:

1
2
3
4
5
6
7
//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("pojo参数传递 user ==> "+user);
return "{'module':'pojo param'}";
}

注意:

POJO参数接收,前端GET和POST发送请求数据的方式不变。

请求参数key的名称要和POJO中属性的名称一致,否则无法封装。

2.3 嵌套POJO类型参数

如果POJO对象中嵌套了其他的POJO类,如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--CDCSyncTableDto
public class CDCSyncTableDto {
private String taskType;
private CDCSyncTableDetail cdcSyncTable;
private CDCSyncTableHistoryDetail cdcSyncHisTable;
public CDCSyncTableDto(){}

}

--CDCSyncTableDetail
public class CDCSyncTableDetail implements Serializable {
private int id;
private String sourceDb;
private String sourceTableName;
private String sinkDb;
private String sinkTableName;
...
public CDCSyncTableDetail() {
 }

}

--CDCSyncTableHistoryDetail
public class CDCSyncTableHistoryDetail {
private int id;
private String sourceDb;
private String sourceTableName;
private String sinkDb;
private String sinkTableName;
private String addColumns;
private String secretColumns;
private int checkInterval;
private int maxRetries;
private int bufferSize;
private int bufferCount;
private int sysStatus;
private String jobName;
private String createTime;
private String updateTime;
}

嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

发送请求和参数:

后台接收参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@ApiOperation(value = "updateSyncTable", notes = "UPDATE_SYNC_TABLE_NOTES")
@PostMapping(value = "/update")
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@ApiException(FLINK_UPDATE_SYNC_TABLE_ERROR)
@AccessLogAnnotation(ignoreRequestArgs = "loginUser")

public Result updateTable(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
CDCSyncTableDto cDCSyncTableDto ) {
Map<String, Object> result = null;
if(cDCSyncTableDto.getTaskType().equals("all") || cDCSyncTableDto.getTaskType().equals("inc")){
result = cDCSyncTableDetailService.updateTable(loginUser,cDCSyncTableDto);
}
return returnDataList(result);
}

注意:

请求参数key的名称要和POJO中属性的名称一致,否则无法封装

2.4 传入pojo对象,其中嵌套List<对象>,这种可以采用postman的body的 raw- JSON传参:

后端接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ApiOperation(value = "createTable", notes = "CREATE_SYNCTABLE_NOTES")
@PostMapping(value ="/create")
@ResponseStatus(HttpStatus.CREATED)
@ApiException(FLINK_CREATE_SYNC_TABLE_ERROR)
@AccessLogAnnotation(ignoreRequestArgs = {"loginUser", "userPassword"})

public Result createTable(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser
,@RequestBody CDCSyncBatchTableDto cDCSyncBatchTableDto) throws Exception {
Map<String, Object> result = null;
if(cDCSyncBatchTableDto.getTaskType().equals("all") || cDCSyncBatchTableDto.getTaskType().equals("inc")){
result = cDCSyncTableDetailService.createTable(loginUser,cDCSyncBatchTableDto);
}
return returnDataList(result);
}

实体类:

1
2
3
4
5
6
public class CDCSyncBatchTableDto {   
private String taskType;
private List<CDCSyncTableDetail> cdcSyncTable;
private List<CDCSyncTableHistoryDetail> cdcSyncHisTable;
}

二、json传输参数

SpringMVC接收JSON数据的实现步骤为:

(1)导入jackson包

(2)使用PostMan发送JSON数据

(3)开启SpringMVC注解驱动,在配置类上添加@EnableWebMvc注解

(4)Controller方法的参数前添加@RequestBody注解

知识点1:@EnableWebMvc

名称 @EnableWebMvc
类型 配置类注解
位置 SpringMVC配置类定义上方
作用 开启SpringMVC多项辅助功能

知识点2:@RequestBody

名称 @RequestBody
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

知识点3: @RequestBody与@RequestParam区别

区别

@RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】

@RequestBody用于接收json数据【application/json】

应用

后期开发中,发送json格式数据为主,@RequestBody应用较广

如果发送非json格式数据,选用@RequestParam接收请求参数

参考链接:

https://blog.csdn.net/m0_73257876/article/details/126403756


觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭



wechat pay



alipay

postman传入复杂参数
http://yuting0907.github.io/2023/06/25/postman传入复杂参数/
作者
Echo Yu
发布于
2023年6月25日
许可协议