Я пытаюсь передать параметр через контекст 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;
});
Это распечатывает:
WRITE TEST
SubscriberContext1 DefaultValue
SubscriberContext2 DefaultValue
Я ожидаю, что это будет:
WRITE TEST
SubscriberContext1 test
SubscriberContext2 test
Почему переменная контекста недоступна в flatMap?