如何解决从请求底流中读取正文
有没有一种以非阻塞方式从 undertow POST 请求中获取正文字符串的好方法?
public static String getBodyRequestParams(HttpServerExchange exchange){
StringBuilder requestBody = new StringBuilder((int) bytesInBody);
exchange.getRequestReceiver().receiveFullString(new Receiver.FullStringCallback() {
@Override
public void handle(HttpServerExchange exchange,String message) {
requestBody.append(message);
}
});
return requestBody.toString();
}
这在大多数情况下都可以正常工作,但在以下情况下,我在使用 getBodyRequestParams 读取时得到空正文:
- 我有一个用于应用程序的 java.net.httpclient 静态实例
- 在 rest api 中,我创建了(作为测试)endpoint1 和 endpoint2
- Endpoint1 只是通过 getBodyRequsestParams 接收请求和读取正文
- Endpoint2 正在使用 httpClient 实例并向 Endpoint1 发送请求
- 第一次通过邮递员调用 Endpoint2 工作正常,在第二次调用中,虽然我发送的正文与第一个请求中的正文相同,但我将在 Endpoint1 中为正文获取 null
我认为它适用于以下情况:
- 如果我不使用静态客户端实例而是为每个请求创建一个新的实例
- 如果我阅读正文并使用下面的代码片段处理交换,它在任何情况下都可以工作,但如果我可以阅读正文并避免使用 httpServerExchange.receiveFullBytes 使用丑陋的代码片段会更好......
public static void endpoint1(HttpServerExchange httpServerExchange){
httpServerExchange.getRequestReceiver().receiveFullBytes((exchange,bytes) -> {
...
}
}
我尝试了所有可以找到如何以非阻塞方式读取请求正文的答案,但都没有奏效。我想,至少,了解为什么它不起作用,因为奇怪的是,它与每个请求的静态 httpclient 和 httpclient 的行为不同,但问题显然出在 getBodyRequestParams 函数中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。