Как сделать логирование response body в реактивном программировании Spring WebFlux

Только начинаю разбираться с реактивным программированием, не судите строго. Используется Spring boot, Spring WebFlux. Настраиваю логирование запросов и ответов с использованием WebFilter.

У ServerHttpRequest можно получить все, что нужно залогировать: method,url, params, body.

У ServerHttpResponse есть метод для получения кода статуса, а body нет.

Как у ServerHttpResponse можно получить body? Либо есть какой-то другой способ в WebFilter это сделать?

@Slf4j
@Component
@ConditionalOnExpression("${logging.request.enabled:true}")
public class WebLogFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        return chain.filter(exchange).doOnSubscribe(subscription -> {
            String method = exchange.getRequest().getMethod().toString();
            String url = exchange.getRequest().getURI().toString();
            String requestParams = queryParamsToString(exchange.getRequest().getQueryParams());
            String requestBody = exchange.getRequest().getBody().toString();
            String responseBody = exchange.getResponse().; // тут хотела доставать body но нет такого метода
            String status = Integer.toString(Objects.requireNonNull(exchange.getResponse().getStatusCode()).value());

            log.info("""
                        \n
                        method: {}
                        url: {}
                        request params: {}
                        request body: {}
                        response body: {}
                        status {}
                        """,
                    method, url, requestParams, requestBody, responseBody, status
            );
        } );
    }
    public static String queryParamsToString(MultiValueMap<String,String> map) {
        StringBuilder sb = new StringBuilder();
        map.forEach((key, value) -> sb.append(key).append("=").append(value).append(", "));
        return sb.toString();
    }
}

Ответы (0 шт):