如何避免POST Url参数中的字符串插值



我正在尝试用单个关键字名称发送以下参数(同名多值(。同样在我的标题中,我有headers.put("内容类型","application/x-www-form-urlencoded"(;属性。

requestData.put("scope", "openid&scope=profile&scope=email");

但在服务器端,该字符串以如下编码格式接收:

scope=openid%26scope%3Dprofile%26scope%3Demail

我希望服务器以scope=openid&scope=配置文件&scope=电子邮件。

请求功能:

@Override
public void getParams(Map<String, String> requestData) {
requestData.put("scope", "openid&scope=profile&scope=email");
}
@Override
public void getParams(Map<String, String> requestData) {
requestData.put("scope", "openid&scope=profile&scope=email");
}

几乎可以肯定的是,java.util.Map不是您想要在这里使用的数据结构。考虑到Map的url编码的工作方式,您观察到的行为是完全正确的,并且您无法通过在getParams方法中做任何巧妙的事情来击败它。

您想要的是类似于MultisetMap<String,List<String>的东西,其中包含一些巧妙的URI序列化代码。

@Override注释的存在是一个不好的迹象——它表明您可能被束缚在一个不支持所需用例的API上。您可能需要撕毁大量现有的代码来扩展您的解决方案以涵盖这种情况。

最新更新