如何使用AsyncHttpClient使用JSON编码的主体构建HTTP DELETE请求

时间:2013-09-24 04:52:31

标签: java asynchttpclient

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

为了测试我在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偷看了数据包转储,发现服务器没有说谎:)

图书馆的作者撰写了大量相关的,有价值的信息,但遗憾的是我找不到专门用于构建DELETE请求的示例代码。

我非常感谢任何建议,指针,当然还有针对性的解决方案!

1 个答案:

答案 0 :(得分:0)

不确定回答我自己的问题是否恰当,但我刚刚在Floodlight-dev Google小组中找到了相关主题。

Problem with Static Flow Pusher DELETE REST method

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

我将关注Google小组的主题,看看它将如何在开发人员之间得出结论。