一、五种类型参数传递
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
| @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