Spring Boot 中请求参数的接收方式详解:查询参数、表单数据、路径参数与 JSON 数据_springboot postmapping param data json
查询参数和以post方式提交的表单数据
1、查询参数:是以get请求用于地址栏中直接搜索目标地址的方式 eg:/users?page=1&size=10
2、post方式提交的表单数据(默认表单提交的 POST
数据):其在请求体中的格式也是key-value格式(key1=value1&key2=value2)
这两种方式在springboot中都可以用@RequestParam注解来接收请求参数 注意:前端发送来的请求中的参数名最好要和后端接收参数的参数名要一致,否则就要指明请求中的哪一个参数要赋值给后端
@DeleteMapping(\"/depts\") public Result delete(@RequestParam(\"id\") Integer idcard){ System.out.println(\"要删除的id是:\" + idcard); return Result.success(); }
这两种方式的不同点:
-
查询参数:放在 URL 中(如
http://xxx.com?key=value
),属于请求行的一部分。 -
默认表单提交的
POST
数据:放在请求体(body)中,不属于 URL。
@RequestParam
要点:如果声明了这个注解,但是查询参数中没有这个参数,程序会报错,这个可以通过注意点二来避免,但是如果没有这个注解,参数路径中也没有这个参数,这个值就为null
@RequestParam
(未指定 required)MissingServletRequestParameterException
@RequestParam(required = false)
null
@RequestParam
null
(包装类型)在 Spring MVC 中,@RequestParam
可以省略,但需满足以下条件:
-
方法参数是简单类型(如
String
、Integer
等)或其数组 / 集合。 -
该参数在请求中必须存在
注意:当前端传递的是一个数组的时候,后端有两种方式来接收数据
方式一:
@DeleteMapping public Result deleteEmpts(@RequestParam ArrayList ids) { log.info(\"获取到的参数是:{}\", ids); return Result.success(); }
用集合来接收数组的时候,@RequestParam这个注解不能省略但是后面的小括号可以省略
方式二
@DeleteMapping public Result deleteEmpts( Integer[] ids) { log.info(\"获取到的参数是:{}\", Arrays.toString(ids)); return Result.success(); }
通过一个包装类的数组来接收
路径参数
通过注解@PathVariable来获取路径参数
直接嵌入在 URL 路径中,使用 {参数名}
占位
/users/123
@GetMapping(\"/dept/{id}\") public Result finddept(@PathVariable(\"id\") Integer id){ Dept dept = deptService.findDept(id); return Result.success(dept); }
当形参名和路径参数名相同的时候(\"id\")可以省略
接收json数据
Json格式数据,要用一个实体对象来接收
规则:json格式数据的键名,要在实体对象中要有且相同,并且在前面加上注解@Requestbody
有几个参数对应实体类中就会有几个参数被赋值,其余参数都是默认值
@PostMapping(\"/depts\") public Result add(@RequestBody Dept dept){ deptService.add(dept); return Result.success(); }
总结
@RequestParam
@PathVariable
@RequestBody
@RequestParam
或 @ModelAttribute
@ModelAttribute
适合绑定表单数据到实体对象。