如何解决使用Reactor Netty HTTP Client时如何获取HTTP响应正文和状态
我将Reactor Netty HTTP客户端here用作独立的依赖项,即不通过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
仅包含标头和状态。从其Java文档here
从示例中也可以使用数据
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响应正文。
我似乎找不到方法。有什么想法吗?qp
解决方法
看看以下方法:
-
Flux<V> response(BiFunction<HttpClientResponse,ByteBufFlux,Publisher<V>> receiver)
-
Mono<V> responseSingle(BiFunction<HttpClientResponse,ByteBufMono,Mono<V>> receiver)
它们允许您同时访问响应正文,状态和 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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。