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

2022-08-31 22:43:13

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

{
    "nameservice": [
        {
            "id": 7413,
            "name": "ask"
        },
        {
            "id": 7414,
            "name": "josn"
        },
        {
            "id": 7415,
            "name": "john"
        },
        {
            "id": 7418,
            "name": "R&R"
        }
    ]
}

以下是我的服务电话

@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();
}

我正在尝试通过这种方式调用上述服务

localhost:8080/service/saveName?acc={ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R&R" } ] }

但输出是这样的

{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R

任何人都可以告诉我为什么我没有得到所有的值吗?


答案 1

我建议将正文中的 JSON 数据作为请求传递。但是,如果您仍然想将其作为URL中的参数传递,则必须像下面这样对URL进行编码,例如:POST

对于 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


答案 2

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

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

在某些情况下,我只能进行GET调用并且它有效。此外,此解决方案实际上是跨语言的。