我需要编写一个 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 请求的示例代码。
我非常感谢任何建议、指点,当然还有精确的解决方案!