Spring Webflux запрос обратного вызова не работает - PullRequest
0 голосов
/ 06 января 2020

Я использую spring-webflux 5.1.7-RELEASE. Я хочу вызвать обратный вызов для веб-клиента непосредственно перед отправкой запроса. Код для этого:

ExchangeFilterFunction logRequest (SomeLogObject someLogObject) {
    return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
        /**
         business logic for callback goes here
         */
        return Mono.just(clientRequest);
    });
}

//code for plugging in logRequest callback (at some othe place)
WebClient webClient = WebClient
        .builder()
        .clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
        .baseUrl(baseURL)
        .filters(exchangeFilterFunctions -> exchangeFilterFunctions.add(logRequest(someLogObject)))
        .build();

webClient
        .get()
        .uri(uriBuilder -> uriBuilder.path("some_uri_path").queryParams(queryParam).build())
        .header("some_header_key", "some_header_value")
        .retrieve().bodyToMono(String.class);

Здесь logRequest запускается в самом начале (задолго до запуска запроса). Что касается моей отладки, я обнаружил, что она запускается при вызове retrieve ().

Есть ли способ гарантировать, что logRequest запускается сразу перед отправкой запроса, а НЕ при создании моно?

Заранее спасибо

1 Ответ

0 голосов
/ 06 января 2020

Я думаю, вы ищете следующее изменение:

ExchangeFilterFunction logRequest (SomeLogObject someLogObject){
    return ExchangeFilterFunction.ofRequestProcessor(clientRequest ->
            Mono.defer(() -> {
                /**
                 business logic for callback goes here
                 */
                return Mono.just(clientRequest);
            })
    );
}

Mono.defer() задержит выполнение кода до реального запроса.

...