Spring Boot中REST接口接收数组参数推荐:GET请求用@RequestParam绑定查询参数(如?ids=1&ids=2),POST/PUT用@RequestBody接收JSON数组;前者适用于简单ID列表,后者适合复杂对象或大数据量,需注意参数来源区分及空值处理。

Spring Boot 中 REST 接口接收数组参数,最常用且推荐的方式是通过 @RequestParam 绑定查询参数(Query Param)中的数组,或用 @RequestBody 接收 JSON 数组体。具体选哪种,取决于前端传参方式。
用 @RequestParam 接收 URL 中的数组(如 ?ids=1&ids=2&ids=3)
适用于 GET 请求,参数以多个同名 query 参数形式传递。Spring 会自动聚合为数组或 List。
示例接口:
@GetMapping("/users")public List
return userService.findByIds(ids);
}
支持类型包括:Long[]、String[]、List 等。Spring 会自动转换并处理空值和重复项。
- 前端可发请求:
/users?ids=101&ids=102&ids=103 - 若参数可选,加
required = false,并注意判空 - 数组为空时(如
?ids=),默认返回长度为 0 的数组;若传参缺失,则数组为null(除非设defaultValue = "")
用 @RequestBody 接收 JSON 数组(如 [1,2,3] 或 [{"id":1},{"id":2}])
适用于 POST/PUT 请求,前端以 JSON 格式提交数组,更灵活、适合复杂对象或大数据量。
示例接口(接收 Long ID 数组):
public Result batchUpdate(@RequestBody Long[] ids) {
return userService.updateByIds(ids);
}
若接收对象数组,定义 DTO 即可:
public class UserDTO {private Long id;
private String name;
// getter/setter
}
@PostMapping("/users/create")
public Result createUsers(@RequestBody UserDTO[] users) { ... }
- 请求头必须含
Content-Type: application/json - 前端 Axios 示例:
axios.post('/users/batch', [1,2,3]) - Spring 默认使用 Jackson,支持泛型、嵌套、日期格式等(需配置好 ObjectMapper)
注意事项与常见问题
避免混淆参数来源,不建议在同一个方法中混用 @RequestParam 和 @RequestBody 接收同名逻辑数组。
- GET 不支持 @RequestBody:HTTP 规范中 GET 请求无 body,强行加会报 415 错误
-
数组为空或 null 时要防御性判断,尤其用
@RequestParam(required = false)时 - 如果前端传的是逗号分隔字符串(如
?ids=1,2,3),可用@RequestParam String ids,再手动split(",")转换 - 路径变量不支持直接接收数组(
@PathVariable String[] ids不生效),需改用 query 或 body 方式
进阶:统一处理数组参数(自定义 Converter 或 HandlerMethodArgumentResolver)
当项目中大量接口需解析特定格式数组(如 Base64 编码数组、加密 ID 列表),可实现 Converter 或自定义参数解析器,但多数场景无需过度设计。
保持简单清晰优先:GET 用 @RequestParam,POST/PUT 用 @RequestBody,语义明确,前端也易理解。











