java—从请求中读取正文

hpcdzsge  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(262)

有没有一个很好的方法,以非阻塞的方式从下拖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的静态示例
在restapi中,我创建了endpoint1和endpoint2(作为测试)
endpoint1只是接收请求并读取带有getbodyrequsestparams的body
endpoint2正在使用httpclient示例并向endpoint1发送请求
通过postman对endpoint2的第一个调用工作正常,在第二个调用中,endpoint1中的body将为null,尽管我发送了与第一个请求相同的body
我认为它适用于以下情况:
如果我不使用静态客户机示例,而是为每个请求创建一个新示例
如果我用下面的代码段读取body并处理exchange,它在任何情况下都可以工作,但是如果我可以直接读取body并避免使用httpserverexchange.receivefullbytes生成难看的代码段,那就更好了。。。

public static void endpoint1(HttpServerExchange httpServerExchange){
        httpServerExchange.getRequestReceiver().receiveFullBytes((exchange, bytes) -> {
          ...
       }
    }

我尝试了所有的答案,我可以找到如何阅读请求体在非阻塞的方式,但都没有工作。我想,至少,理解为什么它不工作,因为奇怪的是,它的行为与静态httpclient和每个请求的httpclient不同,但问题显然在getbodyrequestparams函数中。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题