我正在尝试使用单个键名称发送以下参数(具有多个值的相同名称)。另外,在我的 header 中,我有 headers.put("Content-Type", "application/x-www-form-urlencoded");属性(property)也是如此。
requestData.put("scope", "openid&scope=profile&scope=email");
但在服务器端,该字符串以编码格式接收,如下所示:
scope=openid%26scope%3Dprofile%26scope%3Demail
我希望服务器接收我的参数:scope=openid&scope=profile&scope=email。
请求功能:
@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
中做任何聪明的事情来击败它。方法。
你想要的是类似 Multiset
的东西,或 Map<String,List<String>
使用一些巧妙的 URI 序列化代码。
@Override
的存在注释是一个坏兆头——它表明您可能会受到不支持您所需用例的 API 的束缚。您可能需要删除大量现有代码来扩展您的解决方案以涵盖这种情况。
关于java - 如何避免 POST Url 参数中的字符串插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566181/