如何将hashmap作为JsonObject发送到Java中的Web服务
我正在尝试使用hashmap发出POST请求。Web服务接受的格式如下所示如何将hashmap作为JsonObject发送到Java中的Web服务,java,api,post,apache-httpclient-4.x,org.json,Java,Api,Post,Apache Httpclient 4.x,Org.json,我正在尝试使用hashmap发出POST请求。Web服务接受的格式如下所示 { "students": [ { "firstName": "Abc", "lastName": "XYZ", "courses": [ "Math",
{
"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参数,而不接受映射。在您的示例中,您似乎正在使用java 11中引入的java http客户端。此客户端需要BodyPublisher发送POST请求
java.net.http.bodypublisher
类为您提供了一个名为#ofString(String body)
的方法,您可以使用该方法发送body
因此,您可以这样构建您的HttpRequest:
HttpRequest请求=HttpRequest.newBuilder()
.uri(uri.create(POST_uri))
.header(“内容类型”、“应用程序/json”)
.POST(bodypublisher.ofString(yourBody))
.build();
在这种情况下,您需要将字符串传递给ofString方法,这样您就可以使用Jackson或Gson之类的库。我不知道如何使用Gson实现这一点,但使用Jackson非常简单:
ObjectMapper mapper=new ObjectMapper();
字符串yourBody=mapper.writeValueAsString(yourMap);
HttpRequest请求=HttpRequest.newBuilder()
.uri(uri.create(POST_uri))
.header(“内容类型”、“应用程序/json”)
.POST(bodypublisher.ofString(yourBody))
.build();
就这些:)
编辑:在第二次阅读之后,我想指出,您不能像http请求那样发送java对象。您已经需要将对象转换为服务器可读的格式,如json或XML。Java对象是我们编写的程序的一部分,Http协议无法按原样传递这些对象。这就是我们使用中间格式的原因,因此服务器能够读取此格式并将其转换回对象需要用Json转换myMap吗?只需使用lib-Gson,我对Gson不熟悉。我尝试使用org.json,但没有成功。你能告诉我如何使用org.json吗?