У меня есть поток объектов, и я пытаюсь уменьшить его, пока есть данные, сохраненные в контексте полученных Monos, которые мне нужно использовать в функции сокращения.
//I've reduced it successfully But I don't have the Context Data :(
return Flux.merge(someClient.getSomeDTO(request.getId()),
anotherClient.getAnotherDTO(request.getId())
)
.onErrorMap(e -> new ResponseStatusException(
HttpStatus.BAD_REQUEST,
"An error occurred!", e))
.reduce(OutboundDTO.builder(),
(builder, dto) ->
pageAdapter.buildOutboundDTO(builder, dto, null/*Empty*/)
)
.flatMap(builder -> ServerResponse.ok()
.body(BodyInserters.fromObject(builder.build())));
/*This Doesn't Work It gave compilation error
and it works well with .map(...) but this means I can't reduce it! */
return Flux.merge(someClient.getSomeDTO(request.getId()),
anotherClient.getAnotherDTO(request.getId())
)
.onErrorMap(e -> new ResponseStatusException(
HttpStatus.BAD_REQUEST,
"An error occurred!", e))
.reduce(OutboundDTO.builder(),
(builder, dto) -> Mono.subscriberContext().flatMap(ctx->
pageAdapter.buildOutboundDTO(builder, dto, ctx.get(SavedObject.class))
)
)
.flatMap(builder -> ServerResponse.ok()
.body(BodyInserters.fromObject(builder.build())));
Я ожидаю, что основная цель Mono.subscriberContext()
состоит в том, чтобы делиться между всеми цепочками внизу, а не только в некоторых методах, таких как map, как упомянуто в их справочном руководстве ,
поэтому вопрос в том, возможно ли это сделать в функции .reduce
или есть альтернатива, или, если это невозможно, было бы интересно узнать, почему? :)