我在Spring中有一个REST组件。简化后,它看起来像这样:
@RequestMapping(value = "/route", method = RequestMethod.GET)
public Object thisIsTheMethod(@RequestParam(value = "value", required = false) List<String> values) {
return OtherClass.doTheThing(values);
}
这是用来消耗一个任意长度的字符串列表。你可以用很多方法来实现:
localhost:8080/route?value=this&value=that
或
localhost:8080/route?value=this,that
现在,假设我想传入一个包含逗号的字符串:value,1
。我该怎么做呢?用% 2C替换逗号会得到一个2值的列表(“value”,“1”)。用引号或转义引号括起来也会有类似的问题。看起来当我有多个参数并使用多值模式时它会起作用,但当我使用逗号分隔模式时就不行了。
2条答案
按热度按时间vx6bjr1n1#
编辑:我不知道为什么要创建一个域对象,还要经历编码和解码整个列表的麻烦。你可以简单地对每个参数进行Base64编码,并在读入时决定每个参数。
根据我上面的评论,我能够实现一个解决方案。我对这个实现不是特别满意,但是它完成了工作。我想重申的是,几乎可以肯定有一个更好的解决方案,可以遵循关于域对象和值的编组和解组的更显式的方法。
假设值列表被格式化为值对象的JSON列表,例如:
Base64编码为:
我的控制器设置为:
Value类别为:
}
请求是:
而回应是:
slmsl1lt2#
你可以设置你的
Delimiter
。逗号只是org.springframework.boot.convert.DelimitedStringToCollectionConverter
中的默认逗号。如果你愿意,你可以完全禁用Delimiter
。对于你的代码,它看起来像这样: