Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将hashmap作为JsonObject发送到Java中的Web服务_Java_Api_Post_Apache Httpclient 4.x_Org.json - Fatal编程技术网

如何将hashmap作为JsonObject发送到Java中的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",

我正在尝试使用hashmap发出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参数,而不接受映射。

在您的示例中,您似乎正在使用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吗?