在 spring 网络客户端调用中获取一些 httpHeader
Getting some httpHeader in spring webclient call
在我的 spring 引导 2.4.1 应用程序中,我使用 WebClient 调用一些外部休息服务。
在常规情况下,它非常简单并且工作正常,正如我预期的那样:
InquiryChequeResponse response=webClient.post()
.uri(inquiryChequeUrl)
.body(Mono.just(requestDto), InquiryChequeReq.class)
.exchangeToMono(res -> {
return res.bodyToMono(InquiryChequeResponse.class);
}).block();
但我需要从响应 header 中获取一些值,如“requestTraceId
”并更新最终响应。
我这样试过:
InquiryChequeResponse response=webClient.post()
.uri(inquiryChequeUrl)
.body(Mono.just(requestDto), InquiryChequeReq.class)
.exchangeToMono(res -> {
String requestTraceId= res.headers().asHttpHeaders().getFirst("requestTraceId");
Mono<InquiryChequeResponse> inquiryCheque= res.bodyToMono(InquiryChequeResponse.class);
inquiryCheque.block().setRequestTraceId(requestTraceId);
return inquiryCheque;
}).block();
但我遇到以下异常:
block()/blockFirst()/blockLast() are blocking, whichis not supported in thread reactor-http-nio-2
我的问题是出了什么问题,我怎样才能得到一些特定的请求 header 并将其包含在我的最终回复中?
与其尝试等待 Mono 然后处理内容,不如使用 Mono 上的方法并提供函数 (或 lambdas)来操纵它的内容。
在你的情况下你想使用 map.
.exchangeToMono(res -> {
String requestTraceId = res.headers().asHttpHeaders().getFirst("requestTraceId");
return res
.bodyToMono(InquiryChequeResponse.class)
.map(ic -> {
ic.setRequestTraceId(requestTraceId);
return ic;
});
})
在我的 spring 引导 2.4.1 应用程序中,我使用 WebClient 调用一些外部休息服务。
在常规情况下,它非常简单并且工作正常,正如我预期的那样:
InquiryChequeResponse response=webClient.post()
.uri(inquiryChequeUrl)
.body(Mono.just(requestDto), InquiryChequeReq.class)
.exchangeToMono(res -> {
return res.bodyToMono(InquiryChequeResponse.class);
}).block();
但我需要从响应 header 中获取一些值,如“requestTraceId
”并更新最终响应。
我这样试过:
InquiryChequeResponse response=webClient.post()
.uri(inquiryChequeUrl)
.body(Mono.just(requestDto), InquiryChequeReq.class)
.exchangeToMono(res -> {
String requestTraceId= res.headers().asHttpHeaders().getFirst("requestTraceId");
Mono<InquiryChequeResponse> inquiryCheque= res.bodyToMono(InquiryChequeResponse.class);
inquiryCheque.block().setRequestTraceId(requestTraceId);
return inquiryCheque;
}).block();
但我遇到以下异常:
block()/blockFirst()/blockLast() are blocking, whichis not supported in thread reactor-http-nio-2
我的问题是出了什么问题,我怎样才能得到一些特定的请求 header 并将其包含在我的最终回复中?
与其尝试等待 Mono 然后处理内容,不如使用 Mono 上的方法并提供函数 (或 lambdas)来操纵它的内容。
在你的情况下你想使用 map.
.exchangeToMono(res -> {
String requestTraceId = res.headers().asHttpHeaders().getFirst("requestTraceId");
return res
.bodyToMono(InquiryChequeResponse.class)
.map(ic -> {
ic.setRequestTraceId(requestTraceId);
return ic;
});
})