HttpRequest DELETE 带正文

mr *_*olf 3 httprequest java-11

我必须提交包含正文的http DELETE请求。我知道如何做到这一点,但就我而言,它使用java.net.http.HttpRequest. 不幸的是,该组件仅允许提交BodyPublisherPUTPOST请求

我的问题是,有什么方法可以用于HttpRequest有问题的DELETE请求吗?

dan*_*iel 5

您可以使用HttpRequest.Builder::method带有两个参数的 :

HttpClient client = HttpClient.newBuilder().proxy(HttpClient.Builder.NO_PROXY).build();
HttpServer server = HttpServer.create();
server.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0), 0);
server.createContext("/test/", new HttpHandler() {
    @Override
    public void handle(HttpExchange exchange) throws IOException {
        byte[] bytes = exchange.getRequestBody().readAllBytes();
        exchange.sendResponseHeaders(200, bytes.length == 0 ? -1 : bytes.length);
        try (OutputStream os = exchange.getResponseBody()) {
            os.write(bytes);
        }
    }
});
server.start();
try {
    HttpRequest request = HttpRequest.newBuilder()
            .uri(new URI("http", null,
                    server.getAddress().getHostString(),
                    server.getAddress().getPort(),
                    "/test/test", null, null))
            .method("DELETE", HttpRequest.BodyPublishers.ofString("hahaha...")).build();
    var resp = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(resp);
    System.out.println(resp.body());
} finally {
    server.stop(0);
}
Run Code Online (Sandbox Code Playgroud)