如何将 hashmap 作为 JsonObject 发送到 Java 中的 Web 服务
How to send hashmap as JsonObject to a webservice in Java
我正在尝试使用哈希图发出 POST 请求。网络服务接受的格式如下。
{
"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 参数而不是 map.
在您的情况下,您似乎正在使用 Java 11 中引入的 java http 客户端。此客户端需要 BodyPublisher 来发送 POST 请求。
java.net.http.BodyPublishers
class 为您提供了一个名为 #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 协议无法按原样传递这些对象。这就是我们使用中间格式的原因,因此服务器能够读取这种格式并将其转换回对象
我正在尝试使用哈希图发出 POST 请求。网络服务接受的格式如下。
{
"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 参数而不是 map.
在您的情况下,您似乎正在使用 Java 11 中引入的 java http 客户端。此客户端需要 BodyPublisher 来发送 POST 请求。
java.net.http.BodyPublishers
class 为您提供了一个名为 #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 协议无法按原样传递这些对象。这就是我们使用中间格式的原因,因此服务器能够读取这种格式并将其转换回对象