如何避免在POST网址参数中进行字符串插值?

问题描述 投票:0回答:1

我正在尝试使用单个键名发送以下参数(具有多个值的相同名称)。同样在我的标头中,我有headers.put(“ Content-Type”,“ application / x-www-form-urlencoded”);属性。

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");

}
java rest http url http-post
1个回答
0
投票
@Override
public void getParams(Map<String, String> requestData) {
    requestData.put("scope", "openid&scope=profile&scope=email");
}

几乎可以肯定,java.util.Map不是您要在此处使用的数据结构。给定Map的url编码应该起作用的方式,并且您无法观察到的行为是正确的,并且您无法通过在getParams方法中执行任何巧妙的操作来击败它。

您想要的像是Multiset或带有一些巧妙的URI序列化代码的Map<String,List<String>

@Override批注的存在是一个不好的信号-这表明您可能会被束缚于不支持所需用例的API。您可能需要拆除许多现有代码,以扩展您的解决方案以涵盖这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.