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
相关产品推荐
相关产品推荐

