Spring Boot处理数组与集合参数需按请求来源区分:URL查询串和表单用@RequestParam自动聚合同名参数;JSON请求体必须用@RequestBody配合DTO;日期、对象等特殊类型需配合@DateTimeFormat等注解转换。

Spring Boot 处理数组与集合类型参数,关键在于区分请求来源(URL 查询串、表单体、JSON 请求体)和后端接收方式。不同格式对应不同注解和绑定逻辑,用错容易 400 或空集合。
URL 查询参数中的数组/集合(@RequestParam)
适用于 GET 或带查询参数的 POST/PUT/DELETE。多个同名参数自动聚合成 List 或数组。
- 前端传参示例:
/api/users?role=admin&role=user&role=guest或/api/users?role=admin,user,guest - 后端接收方式:
- 接收为 List<String>:
@RequestParam List<String> role - 接收为 String[]:
@RequestParam String[] role - 若参数名不一致,加 value 指定:
@RequestParam(value = "roles") List<String> roleList
- 接收为 List<String>:
- 注意:默认不允许为空;如需可选,加
required = false,并设默认值(如defaultValue = "")
表单提交(form-data)中的集合参数
POST 表单中多个同名 input(如 checkbox 组),浏览器会按 name 发送多个键值对,Spring 同样通过 @RequestParam 解析。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- HTML 示例:
<input type="checkbox" name="hobby" value="reading">阅读 <input type="checkbox" name="hobby" value="swimming">游泳 - 后端写法:
@PostMapping("/register") public String register(@RequestParam List<String> hobby) - 支持泛型集合(
List<Integer>、Set<String>),但需确保前端传的值能被自动转换(如 "123" → Integer)
JSON 请求体中的数组/集合(@RequestBody)
当集合是复杂对象的一部分(如用户信息 + 标签列表),或需要嵌套结构时,必须走 JSON 体 + @RequestBody。
- 前端发送(Content-Type: application/json):
{"name":"张三","tags":["java","spring","boot"]} - 后端定义 DTO:
public class UserDTO {<br> private String name;<br> private List<String> tags;<br> // getter/setter - 接收方式:
@PostMapping("/user") public Result create(@RequestBody UserDTO dto) - ⚠️ 限制:一个方法只能有一个 @RequestBody 参数;若需混合接收(如 JSON + 路径变量 + 请求头),其他部分用 @PathVariable / @RequestHeader / @RequestParam 协同
特殊类型:日期数组与自定义对象集合
遇到日期、枚举、嵌套对象等,需额外配置类型转换规则。
- 日期数组(如
?date=2026-09-15&date=2026-09-16):
用@DateTimeFormat(pattern = "yyyy-MM-dd") @RequestParam List<LocalDate> date - 对象集合(如多个 Address):
仍走 JSON 体,DTO 中声明List<Address> addresses,Address 类字段标注@DateTimeFormat或@NumberFormat等即可 - 避免手动解析:不推荐在 Controller 里用
request.getParameterValues()手动转集合,失去类型安全和验证能力

















