You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot @RequestParam接收String[]数组提示参数缺失问题

异常产生原因

这个报错本质是请求参数名和后端绑定的参数名不匹配,加上Spring默认的参数绑定规则不支持你当前用的带索引下标的数组传参格式:

  • 你实际传递的参数名是ot-replace[0],属于名称带[0]后缀的独立参数,而后端@RequestParam指定要找的参数名是完全匹配的ot-replace,Spring找不到对应名称的参数就会抛出缺失必要参数的异常。
  • 你用的参数名[索引]=值的格式是PHP等部分后端框架默认支持的数组传参规则,Spring MVC默认没有适配这种格式,它默认识别的数组传参是同参数名重复传多值的形式,比如ot-replace=val1&ot-replace=val2,这种格式下Spring才会自动把同名参数的值收集到数组类型的参数里。
  • 你代码里的@RequestParam没有配置required = false,参数缺失时默认直接抛异常,不会给空值。
修复方案

根据你能不能调整传参格式,选对应方案即可:

方案1:调整传参格式(无额外代码成本,最推荐)

不需要修改后端代码,把请求参数改成Spring默认支持的同名多值格式即可:

GET /xxx/123?ot-replace=kin43&ot-replace=secondVal

Spring会自动把所有名为ot-replace的参数值按顺序封装到regexReplace数组中。

方案2:适配固定的带索引发参格式

如果前端传参格式不能改,固定是ot-replace[0]、ot-replace[1]这种形式,可以用两种方式处理:

  • 轻量处理:直接接收所有请求参数的Map,手动过滤提取目标参数组装数组,适合只有少量接口需要兼容的场景:
@GetMapping(value = "/{userId}/**")
public ResponseEntity<String> viewObject(@PathVariable(value = "userId") String uid,
                                         @RequestParam Map<String, String> allParams) {
    // 提取所有ot-replace[*]格式的参数值
    String[] regexReplace = allParams.entrySet().stream()
            .filter(e -> e.getKey().startsWith("ot-replace["))
            .map(Map.Entry::getValue)
            .toArray(String[]::new);
    // 后续业务逻辑
}
  • 全局适配:如果项目里大量使用这种带索引的数组传参,可以自定义Spring MVC的参数解析器,统一实现这类格式到数组的自动绑定,不用每个接口单独处理。

注意事项

如果业务上允许ot-replace参数不传,记得给@RequestParam注解加上required = false配置,避免参数为空时抛出缺失必要参数的异常。

内容的提问来源于stack exchange,提问作者WISHY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:24:41