【问题标题】:How to send json data in url as request parameters in java如何在 url 中发送 json 数据作为 java 中的请求参数
【发布时间】:2014-10-24 05:06:26
【问题描述】:

我想在 url 中发送 json 数据,如下所示。

editTest.jsp?details=374889331-{"aNumber":2}

我该怎么做?

【问题讨论】:

    标签: java json http-request-parameters


    【解决方案1】:

    URL 编码您的详细信息参数:

    String otherParameter = "374889331-";    
    String jsonString = "{\"aNumber\":2}";
    
    String url = "editTest.jsp?details=" + URLEncoder.encode(otherParameter + jsonString, "UTF-8");
    

    【讨论】:

    • 这有意义吗?它将其编码为看起来很奇怪的 url 参数:%7B%22aNumber%22%3A2%7D.
    • @AlexMoore-Niemi 看看这个 URL 编码参考:w3schools.com/tags/ref_urlencode.ASP
    • 编码本身很好,但它也在对括号等进行编码。这似乎并不完全等同于发送“foo = bar”,我认为并非所有服务器都会将其解释为相同。我想这就是海报所要求的!
    【解决方案2】:

    您需要将JSON object 转换为字符串

          JSONObject obj = new JSONObject();
    
          obj.put("name","foo");
    
          StringWriter out = new StringWriter();
          obj.writeJSONString(out);
    
          String jsonText = out.toString();//JSON object is converted to string
    

    现在,您可以将此jsonText 作为参数传递。

    【讨论】:

    • 问题是转换后的字符串包含 ':' 这在 url 中不起作用。
    • @SanjayaLiyanage 你从来没有在你的问题中说过......!
    • @SanjayaLiyanage 是的,我知道,但这不是你的问题,对吧?
    • ok Nishad 对不起,如果问题不是重点。为什么我无法从 url 发送 json 数据是因为它包含:.
    • 好的,听起来不错。为什么不使用请求对象来传递参数?您使用的是哪个框架?
    【解决方案3】:

    Json2 可以提供帮助。 JSON.stringify(obj)

    【讨论】:

      【解决方案4】:

      我们可以使用Gson的帮助

      String result =new Gson().toJson("your data");
      

      注意:Gson 需要 jar 文件

      【讨论】:

        【解决方案5】:

        我们可以使用 GSON 将 Object 转换为 JSON Object,然后解析 JSON 对象并将其转换为查询参数字符串。 Object 应该只包含原始对象,如 int、float、string、enum 等。否则,您需要添加额外的逻辑来处理这些情况。

        public String getQueryParamsFromObject(String baseUrl, Object obj) {
                JsonElement json = new Gson().toJsonTree(obj);
                // Assumption is that all the parameters will be json primitives and there will
                // be no complex objects.
                return baseUrl + json.getAsJsonObject().entrySet().stream()
                        .map(entry -> entry.getKey() + "=" + entry.getValue().getAsString())
                        .reduce((e1, e2) -> e1 + "&" + e2)
                        .map(res -> "?" + res).orElse("");
            }
        

        【讨论】:

          猜你喜欢
          • 2015-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-03
          • 2020-11-02
          • 1970-01-01
          相关资源
          最近更新 更多