微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Java 11 中处理 POST 请求

如何解决在 Java 11 中处理 POST 请求

我在使用 Java 11 嵌入式库 java.net 处理 POST 请求时遇到问题。

客户端: 我的 QueryGenerator 类中有两种方法

public String postTeachers(String newTeachersList) {
    this.customrequest = HttpRequest.newBuilder()
            .uri(URI.create("http://" + serverIPport + "/" + postTeachers))
            .POST(HttpRequest.BodyPublishers.ofString(newTeachersList))
            .build();
    return getResponseResults();
}

用于创建发布请求。

而且我还有一个 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()。请检查How to get an HTTP POST request body as a Java String at the server side? 了解更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。