如何将JSON数组作为URL中的参数传递

roc*_*ing 27 java spring json web-services

我要求在Web服务调用中将一些值从移动设备传递到服务器,因此我打算以JSON格式传递所有值,如下所示

{
    "nameservice": [
        {
            "id": 7413,
            "name": "ask"
        },
        {
            "id": 7414,
            "name": "josn"
        },
        {
            "id": 7415,
            "name": "john"
        },
        {
            "id": 7418,
            "name": "R&R"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

以下是我的服务电话

@RequestMapping("/saveName")
@ResponseBody
public String saveName(String acc)
{jsonObject = new JSONObject();
    try
    {
    );
    System.out.println(acc);
    jsonObject.accumulate("result", "saved ");
    }
    catch(Exception e)
    {
        e.printStackTrace();jsonObject.accumulate("result", "Error Occured ");
    }
    return jsonObject.toString();
}
Run Code Online (Sandbox Code Playgroud)

我试图通过这种方式调用上述服务

localhost:8080/service/saveName?acc={ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R&R" } ] }
Run Code Online (Sandbox Code Playgroud)

但输出是这样的

{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R
Run Code Online (Sandbox Code Playgroud)

可以告诉我为什么我没有得到所有的价值观吗?

RE3*_*350 38

我建议将身体中的JSON数据作为POST请求传递.但是如果您仍想将其作为URL中的参数传递,则必须对您的URL进行编码,例如: -

对于ex json是: - >{"name":"ABC","id":"1"}

testurl:80/service?data=%7B%22name%22%3A%22ABC%22%2C%22id%22%3A%221%22%7D

有关URL编码的更多信息,请参阅下文

https://en.wikipedia.org/wiki/Percent-encoding


小智 24

我知道这可能是后来的帖子,但是,对于新访问者,我将分享我的解决方案,因为OP要求通过GET传递JSON对象的方法(而不是其他答案中建议的POST).

  1. 获取JSON对象并将其转换为字符串(JSON.stringify)
  2. 获取字符串并在Base64中对其进行编码(您可以在此处找到一些有用的信息
  3. 将其附加到URL并进行GET调用
  4. 扭转过程.解码并将其解析为一个对象

我在某些情况下使用了这个,我只能做GET调用而且它有效.此外,该解决方案实际上是跨语言的.

  • 您不需要base64。您应该可以使用`encodeURIComponent()`。 (6认同)
  • 正如答案中给出的链接中所讨论的,Base64 对于 URL 来说并不安全。替代方案是 a) [使用不同的 64 个字符:base64url](https://en.wikipedia.org/wiki/Base64#URL_applications) 或 b) [对 base64 数据进行 urlencode](/sf/answers/881435901/ /199364)。 (2认同)

小智 6

我知道这已经很旧了,但如果其他人想知道为什么他们会得到像上面这样不完整的 json ,是因为 & 符号&是 URL 中用于分隔参数的特殊字符。
在您的数据中,有一个&符号R&R。因此 acc 参数在到达 & 字符时结束。

这就是为什么你会得到被切割的数据。解决方案是对数据进行 url 编码,或者像已接受的解决方案建议的那样以 POST 形式发送。