在 Java 11 中处理 POST 请求

Handling POST Request in Java 11

我在使用 Java 11 嵌入式库 java.net.

处理 POST 请求时遇到问题

客户端: 我的 QueryGenerator class:

中有两种方法
public String postTeachers(String newTeachersList) {
    this.customRequest = HttpRequest.newBuilder()
            .uri(URI.create("http://" + serverIPport + "/" + postTeachers))
            .POST(HttpRequest.BodyPublishers.ofString(newTeachersList))
            .build();
    return getResponseResults();
}

用于创建post请求。

我还有一个getResponseResults()方法

private String getResponseResults() {

    String result = null;
    try {
        CompletableFuture<HttpResponse<String>> response = CustomHttpClientSingleton.getInstance().sendAsync(customRequest, HttpResponse.BodyHandlers.ofString());
        result = response.thenApply(HttpResponse::body).join();
    } catch(RuntimeException e) {
        System.out.println("Seems like the server may not be working properly! Restart it");
    }
    return result;
}

服务器端: 我有一个方法handlePostRequest

private void handlePostRequest(HttpExchange httpExchange) throws IOException {
    Headers headers = httpExchange.getResponseHeaders();
    httpExchange.sendResponseHeaders(200, 0);
    InputStream is = httpExchange.getRequestBody();
    System.out.println(is.toString());
    is.close();
}

我在我的 HttpServer 中收到 POST 请求,但是当我尝试显示请求正文的内容时,我没有收到任何信息。我期待收到我的 ArrayList 集合的 JSON 表示,但我得到的唯一输出是: sun.net.httpserver.FixedLengthInputStream

有没有什么方法可以在 POST 请求中获取 http 客户端发送的请求主体,并通过 Java 11 java.net 嵌入式库在服务器端使用它。

谢谢大家!

您必须阅读 Inputstream 内容,而不仅仅是应用 toString()

https://www.baeldung.com/convert-input-stream-to-string

您似乎没有正确读取输入流。尝试读取输入流而不是对其调用 toString() 。请检查 获取更多信息。