> 技术文档 > Spring Boot 中请求参数的接收方式详解:查询参数、表单数据、路径参数与 JSON 数据_springboot postmapping param data json

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 声明方式 请求中无参数时的结果 异常风险 场景 1 @RequestParam(未指定 required) 抛出MissingServletRequestParameterException 存在报错风险 场景 2 @RequestParam(required = false) 参数值为null 无异常,需处理 null 情况 场景 3 未使用@RequestParam 参数值为null(包装类型) 无异常,需处理 null 情况

在 Spring MVC 中,@RequestParam 可以省略,但需满足以下条件:

  1. 方法参数是简单类型(如 StringInteger 等)或其数组 / 集合。

  2. 该参数在请求中必须存在

注意:当前端传递的是一个数组的时候,后端有两种方式来接收数据

方式一:

 @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 用于 GET 请求,参数放在 URL 中,适合简单的键值对参数传递。 路径参数 @PathVariable 用于 URL 中嵌入参数,适合表示资源的唯一标识。 JSON 数据 @RequestBody 用于接收复杂的结构化数据,如对象、数组等。 表单数据 @RequestParam@ModelAttribute 用于 POST 请求的表单数据提交,@ModelAttribute 适合绑定表单数据到实体对象。