[英]Decorate webclient response using reactive context
I'm trying to pass a parameter through the webClient context to understand how the reactive context works.我正在尝试通过 webClient 上下文传递参数以了解反应式上下文的工作原理。
.post()
.uri(uri)
.headers(httpHeaders -> httpHeaders.putAll(headers))
.body(BodyInserters.fromObject(payload))
.exchange()
.flatMap( s -> Mono.subscriberContext()
.map( ctx -> {
System.out.println(“SubscriberContext1 " + ctx.getOrDefault("test", "DefaultValue”));
return s;
}))
.flatMap(resp -> {
return resp
.bodyToMono(Object.class)
.defaultIfEmpty(new HashMap<>())
.map(body -> {
//I would like to access the context variable here
return doSomething(body, contextVariable);
});})
.flatMap( s -> Mono.subscriberContext()
.map( ctx -> {
System.out.println("SubscriberContext2” + ctx.getOrDefault("test", "DefaultValue”));
return s;
}))
.subscriberContext(ctx -> {
System.out.println("WRITE TEST");
ctx.put("test", "test");
return ctx;
});
This prints out:这打印出来:
WRITE TEST
SubscriberContext1 DefaultValue
SubscriberContext2 DefaultValue
I'd expect it to be:我希望它是:
WRITE TEST
SubscriberContext1 test
SubscriberContext2 test
Why is the context variable not accessible within the flatMap?为什么在 flatMap 中无法访问上下文变量?
ctx.put creates a new context. ctx.put 创建一个新的上下文。 Changing the code to:将代码更改为:
.subscriberContext(ctx -> {
System.out.println("WRITE TEST");
return ctx.put("test", "test");
});
solves it.解决它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.