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

Spring Boot Rest Controller查询参数逗号不拆分问题求助

Spring Boot禁止查询参数按逗号拆分的解决方案

问题描述

Spring Boot处理查询参数时存在不一致行为:

  • 单个查询参数包含逗号时,会自动按逗号拆分:XXX?array=1,2,3 被解析为 ["1", "2", "3"]
  • 同一参数多次定义时,每个参数值里的逗号不会被拆分:XXX?array=1,2&array=3 被解析为 ["1,2", "3"]

由于业务场景中部分查询参数本身包含逗号,需要统一禁止Spring按逗号拆分查询参数的行为。

解决方案

方法1:修改单个接口的参数拆分规则

直接在@RequestParam注解中指定split属性为一个业务参数不会用到的分隔符,让Spring无法匹配拆分规则,从而保留参数原始值:

修改后的Controller代码:

@RestController
public class Controller {

    @GetMapping(path = "arrays", produces = {MediaType.APPLICATION_JSON_VALUE})
    public List<String> getArrayQueryParameters(@RequestParam(value = "array", split = "###") String[] array) {
        return Arrays.asList(array);
    }
}

方法2:全局配置禁用逗号拆分

如果需要对所有接口的数组类型查询参数禁用逗号拆分,可以通过自定义转换器覆盖Spring默认逻辑:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToArrayConverter());
    }

    static class StringToArrayConverter implements Converter<String, String[]> {
        @Override
        public String[] convert(String source) {
            // 直接将单个参数值作为数组唯一元素返回,不做任何拆分
            return new String[]{source};
        }
    }
}

验证效果

修改后运行测试用例,所有场景都会符合预期:

  • oneParameter测试:/arrays?array=1,2,3,4,5 解析为 ["1,2,3,4,5"]
  • parameterTwoTimes测试:/arrays?array=1,2&array=3,4,5 解析为 ["1,2", "3,4,5"]
  • parameterThreeTimes测试:/arrays?array=1,2&array=3&array=4,5 解析为 ["1,2", "3", "4,5"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:50:21