当前位置: 首页 > 知识库问答 >
问题:

如何在使用Reactor Netty HTTP客户端时同时获得HTTP响应体和状态

罗鸿畴
2023-03-14

我在这里使用Reactor Netty HTTP客户端作为独立的依赖项,即不是通过spring-webflux,因为我不想拖入与spring相关的依赖项

从文档中可以看出,可以发出返回HttpClientResponse的请求

import reactor.netty.http.client.HttpClient;
import reactor.netty.http.client.HttpClientResponse;

public class Application {

    public static void main(String[] args) {
        HttpClientResponse response =
                HttpClient.create()                   
                          .get()                      
                          .uri("http://example.com/") 
                          .response()                 
                          .block();
    }
}

问题是httpclientresponse只包含头和staus。从这里的Java文件可以看出

从示例中也可以使用您可以做的数据

import reactor.netty.http.client.HttpClient;

public class Application {

    public static void main(String[] args) {
        String response =
                HttpClient.create()
                          .get()
                          .uri("http://example.com/")
                          .responseContent() 
                          .aggregate()       
                          .asString()        
                          .block();
    }
}

但这仅将http实体数据作为字符串返回。没有有关标头或状态代码的信息。

我现在遇到的问题是,我需要发出一个请求,并得到一个响应,该响应既给我报头、状态等,又给我http响应体。

我好像找不到办法。有什么想法吗?QW

共有1个答案

赵高韵
2023-03-14

看看下面的方法:

  • 通量 响应(双功能 >接收器)
  • 响应(双功能 >接收器)

它们允许您同时访问响应正文、状态和http头。

例如,使用responseSingle方法,可以执行以下操作:

private Mono<Foo> getFoo() {
    return httpClient.get()
            .uri("foos/1")
            .responseSingle(
                    (response, bytes) ->
                            bytes.asString()
                                    .map(it -> new Foo(response.status().code(), it))
            );
}

上面的代码将响应转换为某些域对象foo,定义如下:

public static class Foo {
    int status;
    String response;

    public Foo(int status, String response) {
        this.status = status;
        this.response = response;
    }
}
 类似资料:
  • 我有一些文件要上传,有些文件失败了,因为帖子是异步的,而不是同步的。 我正在尝试将此调用作为同步调用。 我想等回应。 如何将此调用设为同步调用? 任何帮助感谢!

  • 问题内容: 我经常在Netty工作,但仍然有一个概念在暗示我,在教程等中找不到任何内容。首先,我确实了解Netty是异步的,但是客户端必须有一种方法来调用服务器,并且能够获得处理程序之外的响应。让我解释更多。 我有一个客户,如下图所示。并且请注意,我知道它是自举的,并且在每次调用时都会建立一个新的连接,这是为了使示例更小,更简洁。请忽略这个事实。 客户端.java 现在,我了解了如何获取服务器上的

  • 只是想知道有没有办法得到spring Web-Flux的web客户端的响应时间?

  • 问题内容: 我正在使用Zend_Framework编写一个应用程序(因此解决方案可以依靠它)。 如何获得客户的时区? 例如,如果有人在俄罗斯莫斯科,我想得到3 * 60 * 60(因为有UTC + 3)。如果他在英国,我要零。如果他使用UTC-3:30(加拿大?),我要-3.5 * 60 * 60。 (这不是格式的问题-我可以在俄罗斯圣彼得堡获得’Europe / Moscow’或’UTC-3’,

  • 我通过一个spring上下文注入了一个JAX RS客户端,如下所示: 在成功响应(200、202、204)的情况下,如何访问响应状态?

  • 我试图使用REST模板从另一个组件调用delete方法。我在POSTMAN中收到的响应是以下JSON: 我应该无法删除该对象,所以我的请求在org.springframework.web.client.HttpClienterRoreXception失败。 在日志中,我只看到: 这是我用来捕获HttpClienterRoreXception的代码: 我在其他文章DELETE in Spring R