Spring boot 2 WebClient получает параметр контекста в подписчике

Я использую 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
              }
            }); 
}

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

где это requestId, о котором вы говорите? Что ты пробовал? Почему это не работает? Вам нужно что-то делать с данными, возвращаемыми удаленной службой?

Brian Clozel 23.05.2018 09:37

@BrianClozel Я обновил вопрос более четким примером

Brajesh Pant 24.05.2018 08:02

Я все еще не понимаю проблемы. В этой области доступен параметр метода requestId. Почему вы не можете повторно использовать requestId, который у вас есть? Где вы ожидали найти эту информацию в противном случае?

Brian Clozel 14.06.2018 14:32
1
3
752
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме