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



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

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

但是删除没有运气。

不知何故,它不会将 JSON 字符串写入其请求正文。该代码与开机自检几乎相同。为了调试,我不会将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窥视了数据包转储,发现服务器没有撒谎:)

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

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

不确定在这里回答我自己的问题是否合适,但我刚刚在 floodlight-dev Google 小组中找到了一个相关的线程。

静态流推杆删除休息方法的问题

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

我将关注谷歌小组的线程,看看它将如何在开发人员中得出结论。

最新更新