Spring boot 2 WebClient получает контекстный параметр в подписчике - PullRequest
0 голосов
/ 23 мая 2018

Я использую WebClient для вызова внешнего API, я связываю requestId для каждого запроса.Как только запрос обработан и ответ получен, я обновляю некоторую таблицу, используя requestId, чтобы я мог подтвердить, что все данные, связанные с requestId, обработаны.

public void getEmployeeData(List<Integer>employeeIds, String requestId){
   WebClient webClient = WebClient.builder().baseUrl(baseUrl).build();

   webClient.post().uri(uri)
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .accept(MediaType.APPLICATION_JSON_UTF8)
            .header(HttpHeaders.AUTHORIZATION, "Basic " + Base64Utils
            .encodeToString((plainCreds)
            .getBytes(Charset.defaultCharset())))
            .body(BodyInserters.fromObject(body)).retrieve()
            .bodyToFlux(EmployeeInfo.class)
            .doOnError(throwable -> {
               Mono.error(throwable);
            }).subscribe(new Consumer<EmployeeInfo>() {
                @Override
                public void accept(EmployeeInfo employeeInfo) {
                    // Here I need the requestId which is passed as function 
                    //parameter
              }
            }); 
}

Приведенная выше функция получает список идентификаторов сотрудников.с помощью requesttid мне нужно вызвать внешний API, чтобы получить информацию для списка сотрудников, прежде чем вызывать эту функцию, я сохраняю весь список сотрудников по запросу, так что после получения ответа я могу обновить таблицу, утверждая, чтовся информация о сотруднике получена для данного requestId.Теперь в части подписчика мне нужен requestId, чтобы я мог соотнести получаемый ответ с конкретным requesttid

1 Ответ

0 голосов
/ 15 июня 2018

Вы можете добавить final для requestId, чтобы его можно было использовать в функции подписки.

public void getEmployeeData(List<Integer>employeeIds, final String requestId){
...