如何在@RequestParam中传递多值并正确拆分得到完整数组
问题原因
你遇到的拆分结果不符合预期,本质是Java的String.split(String regex)方法默认会丢弃字符串末尾所有连续的空匹配项:当你传入",b,"调用split(",")时,末尾的空字符串会被自动去掉,最终只得到2个元素。
解决方案
方案1:不修改后端代码,调整传参值
直接给参数末尾加一个不会出现在你的业务参数里的占位分隔符,传递参数值为",b,,"即可:
- 拆分时调用
split(",")得到的结果为["", "b", "", ""],你只需要取前3个元素就能得到预期的["", "b", ""] - 占位符可以根据业务规则自定义,只要保证不会和a/b/c的合法取值冲突就行
方案2:修改后端拆分逻辑,更稳妥无需调整传参
不用改前端传参方式,直接把后端的拆分代码改成带limit参数的重载版本:query.split(",", -1)
当limit参数为负数时,split方法会保留所有末尾的空匹配项,你传",b,"拆分后直接就能得到["", "b", ""]的预期结果。
可选参数适配优化建议
如果a/b/c都是独立可选的,更合理的接口写法是把三个参数拆开单独传:
public List<String> get( @RequestParam(value = "a", required = false) String a, @RequestParam(value = "b", required = false) String b, @RequestParam(value = "c", required = false) String c )
这种写法不需要额外做字符串拆分,也不会出现空值丢失的问题,后期维护也更简单。
内容的提问来源于stack exchange,提问作者bchird
相关产品推荐
相关产品推荐

