【问题标题】:How to send hashmap as JsonObject to a webservice in Java如何将哈希图作为 JsonObject 发送到 Java 中的 Web 服务
【发布时间】:2021-06-22 13:41:31
【问题描述】:

我正在尝试使用哈希图发出 POST 请求。 Web 服务接受的格式如下所示。

{ 
"students": [
         {
            "firstName": "Abc",
            "lastName": "XYZ",
            "courses": [
            "Math",
            "English"
            ]
          }
}

这是我的代码

HttpClient client2 = HttpClient.newBuilder().build();
HttpRequest request2 = HttpRequest.newBuilder()
          .uri(URI.create(POST_URI))
          .header("Content-Type", "application/json")
          .POST(new JSONObject(myMap))
          .build();

但是,这不起作用。到目前为止我看到的所有示例都只接受字符串作为 POST 参数而不接受映射。

【问题讨论】:

  • 需要在 Json 中转换 myMap 吗?只需使用 lib Gson,
  • 我对gson不熟悉。我尝试使用 org.json 但我没有成功。你能告诉我如何使用 org.json 吗?

标签: java api post apache-httpclient-4.x org.json


【解决方案1】:

在您的情况下,您似乎正在使用 Java 11 中引入的 java http 客户端。该客户端需要 BodyPublisher 来发送 POST 请求。

java.net.http.BodyPublishers 类为您提供了一个名为 #ofString(String body) 的方法,您可以使用它来发送正文。

所以你可以像这样构建你的 HttpRequest :

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(POST_URI))
    .header("Content-Type", "application/json")
    .POST(BodyPublishers.ofString(yourBody))
    .build();

在这种情况下,您需要将字符串传递给ofString 方法,因此您可以使用Jackson 或Gson 之类的库。我不知道如何使用 Gson 来做到这一点,但使用 Jackson 非常简单:

ObjectMapper mapper = new ObjectMapper();

String yourBody = mapper.writeValueAsString(yourMap);

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(POST_URI))
    .header("Content-Type", "application/json")
    .POST(BodyPublishers.ofString(yourBody))
    .build();

就是这样:)

编辑:经过第二次阅读,我想指出您不能在 http 请求中发送 java 对象。您已经需要将对象转换为服务器可读的格式,例如 json 或 XML。 Java 对象是我们编写的程序的一部分,Http 协议无法按原样传递这些对象。这就是我们使用中间格式的原因,因此服务器能够读取此格式并将其转换回对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多