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

标签 java rest http url http-post

我正在尝试使用单个键名称发送以下参数(具有多个值的相同名称)。另外,在我的 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/

相关文章:

java - 随机单词检索的数据结构

java - 在Java中读取UTF-8文件时出错

java - Spring 占位符不解析 JavaConfig 中的属性

java - 使用 jackson databind 将 JSON 反序列化为 Map<String,String>

python - Flask MethodView 与 Flask-Restful 资源

java - 在 Java 中设置文件下载的内容类型

http - 实际中空闲 HTTP 连接的理想超时长度

java - Java中不重复的字符数组输入

java - 多个数据库的 Dao 接口(interface)?

asp.net - Node.js 服务器端对 ASP 脚本的 HTTP 请求