如何解决在 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 举报,一经查实,本站将立刻删除。