java - 如何使用 AsyncHttpClient 构建带有 JSON 编码正文的 HTTP DELETE 请求

标签 java asynchttpclient

我需要编写一个 HTTP 客户端,通过其 REST API 与 Floodlight OpenFlow Controller 进行通信。 .

为了测试,我用 python 做了它,并且工作正常。但现在我面临的情况是必须用Java 来完成,诚然我还处于初学者水平。我的一个应用程序使用 AsyncHttpClient发送异步 GET 请求,并且工作得很好。现在作为 Floodlight 的 REST 客户端,它必须使用 JSON 编码的正文执行 POST 和 DELETE。我的异步 POST 请求代码非常符合预期。

但是 DELETE 没有运气。

不知何故,它不会将 JSON 字符串写入其请求正文中。 代码与POST几乎相同。为了进行调试,我不会将 AsyncCompletionHandler 实例提供给execute() 方法。

System.out.println(ofEntry.toJson());  // this returns {"name": "xyz"} as expected.

Future<Response> f = httpClient.prepareRequest(new RequestBuilder("DELETE")
                                     .setUrl("http://" + myControllerBaseUrl + urlPathFlowPostDelete)
                                     .setHeader("content-type", "application/json")
                                     .setBody(ofEntry.toJson())
                                     .build()).execute();

System.out.println(f.getStatusCode());  // returns 200.

System.out.println(f.getResponseBody()); // returns {"status" : "Error! No data posted."}.

为了确定,我用wireshark查看了数据包转储,发现服务器没有说谎:)

该库的作者编写了大量相关的、有值(value)的信息,但遗憾的是我找不到专门用于构建 DELETE 请求的示例代码。

我非常感谢任何建议、指示,当然还有精确的解决方案!

最佳答案

不确定在这里回答我自己的问题是否合适,但我刚刚在 Floodlight-dev Google 群组中找到了相关帖子。

Problem with Static Flow Pusher DELETE REST method

因此,这可能是 Floodlight REST API 的问题,它需要 DELETE 请求的消息正文来识别要删除的内容,而 AHC 只是符合 RFC2616。

我将关注 Google 小组的讨论,看看开发者会如何得出结论。

关于java - 如何使用 AsyncHttpClient 构建带有 JSON 编码正文的 HTTP DELETE 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18973173/

相关文章:

Android:无法取消异步任务

java - Apache async HttpClient 速度不快

java - FileNotFoundException(权限被拒绝)

c# - 如何处理来自httpclient的数据

java - Hiibernate : java. lang.ClassCastException : java. lang.String 无法转换为 java.lang.Integer

java - 以 ArrayList 作为返回类型的 AsyncTask

java - 无法覆盖 JsonHttpResponseHandler 中的 onSuccess() 方法

java - Android - loopJ AsyncHttpClient 返回响应 onFinish 或 onSuccess

java - JList 中的 ActionListener 出现 ArrayIndexOutOfBoundsException

java - Java Swing 中的问题