Используя Spring Boot 2 WebClient, в порядке многопоточности / для запроса, как отправлять заголовки diff при каждом запросе? - PullRequest
0 голосов
/ 21 февраля 2019

В Spring Boot 1.5.x я мог бы использовать перехватчики с AsyncRestTemplate, чтобы захватывать заголовки из входящего запроса к конечной точке RestController и помещать их в любые exchange запросы, сделанные через AsyncRestTemplate.

Я не понимаю, как это может работать с WebClient.Похоже, если вы создаете WebClient, что все его заголовки и т. Д. Установлены и неизменны:

WebClient client = WebClient.builder()
    .baseUrl( "http://blah.com" )
    .defaultHeader( "Authorization", "Bearer ey..." )
    .build();

Хотя я могу изменить их, используя client.mutate(), это создает совершенно новый объект WebClient.Я бы предпочел не создавать новый при каждом запросе.Разве нет способа сохранить WebClient и иметь заголовки для каждого запроса и другие параметры?

Кажется, что большие потери и низкая производительность заставляют каждый раз создавать новый объект.

1 Ответ

0 голосов
/ 26 февраля 2019

Здесь вы используете заголовки по умолчанию, которые должны отправляться для всех запросов, отправленных этим экземпляром WebClient.Так что это полезно для заголовков общего назначения.

Вы, конечно, можете изменять заголовки запросов для каждого запроса, например, так:

Mono<String> result = this.webClient.get()
      .uri("/greeting")
      .header("Something", "value")
      .retrieve().bodyToMono(String.class);

Если вы хотите иметь перехватчикМеханизм изменения запроса перед его отправкой позволяет настроить экземпляр WebClient с фильтром:

WebClient
    .builder()
    .filter((request, next) -> {
            // you can mutate the request before sending it
            ClientRequest newRequest = ClientRequest.from(request)
                    .header("Something", "value").build();
            return next.exchange(newRequest);
})

Ознакомьтесь с документацией Spring Framework о WebClient .

...