HttpRequest DELETE 带正文

标签 httprequest java-11

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

我的问题是,有没有办法使用 HttpRequest 来处理有问题的 DELETE 请求?

最佳答案

您可以使用带有两个参数的 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);
}

关于HttpRequest DELETE 带正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389571/

相关文章:

带有 body 属性的 node.js https POST - 如何?

java - Struts 2中如何获取action标签的请求属性

java - 使用 Java 11 HttpClient 读取分块数据

java - Java 11 中的垃圾收集 JVM args 是否有替代品?

maven - Spring-Boot 多模块无法从另一个模块读取属性文件

java - Java 11 中的 gson 和 java.sql?

url - 在 Spring MVC 中获取当前 URL 的最佳方法是什么?

http - 获取正在发送的 HTTP 请求正文

swift - 发布图像对象 Clarifai Rest api swift

Java 11 标准环境与 ApiProxy 不兼容?