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
: @RequestParam List<string> role</string> - 接收为 String[]:
@RequestParam String[] role - 若参数名不一致,加 value 指定:
@RequestParam(value = "roles") List<string> roleList</string>
- 接收为 List
- 注意:默认不允许为空;如需可选,加
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)</string> - 支持泛型集合(
List<integer></integer>、Set<string></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</string> - 接收方式:
@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</localdate> - 对象集合(如多个 Address):
仍走 JSON 体,DTO 中声明List<address> addresses</address>,Address 类字段标注@DateTimeFormat或@NumberFormat等即可 - 避免手动解析:不推荐在 Controller 里用
request.getParameterValues()手动转集合,失去类型安全和验证能力










