Как проверить объект ответа в Spring WebClient - PullRequest
1 голос
/ 30 марта 2020

Я использую Веб-клиент Springs для выполнения HTTP GET вызова.

Как проверить объект ответа GetPersonBasicInfoResWrapper Это свойство, которое я получил в ответ на мой HTTP-вызов.

Я пытаюсь проверить birthDate внутри flatMap, заблокировав объект ответа, но он не выглядит самым функциональным способ сделать это.

Ниже приводится выдержка из моего кода.

private Mono<GetPersonBasicInfoResWrapper> getPersonBasicInfo(Double personId, LocalDate birthDate,
            CallerRequestMetaData callerInfo) {
        return middlewareWebClient
                .get()
                .uri(...)
                ...
                ...
                .exchange()
                .flatMap(client -> {
                    GetPersonBasicInfoResWrapper block = client.bodyToMono(GetPersonBasicInfoResWrapper.class).block();
                    LocalDate personBirthDate = LocalDateTime.ofInstant(block.getBirthDate().toInstant(),ZoneId.of(Constants.DEFAULT_TIME_ZOME)).toLocalDate();
                    if (!personBirthDate.equals(birthDate)) { 
                        throw new YakeenRowadException(Errors.INCORRECT_ID_BIRTH_DATE_G, birthDate.toString()); 
                    } else
                        return client.bodyToMono(GetPersonBasicInfoResWrapper.class);
                });
}

Любая помощь высоко ценится.

1 Ответ

2 голосов
/ 31 марта 2020

Попробуйте что-то вроде этого

private Mono<PersonInfo> getPersonInfo(Double personId) {
    return webClient.get()
            .uri(...)
            .exchange()
            .flatMap(response -> {
                return response.bodyToMono(PersonInfo.class);
            });
}

private LocalDate toLocalDate(Instant instant) {
    return LocalDateTime.ofInstant(instant, ZoneId.of(Constants.DEFAULT_TIME_ZOME))
                        .toLocalDate();
}

public Mono<PersonInfo> doSomething(Double personId, LocalDate birthDate) {
    return getPersonInfo(personId)
             .flatMap(personInfo -> {
                final LocalDate birthDate = toLocalDate(personInfo.getBirthDate().toInstant());
                if (!personBirthDate.equals(birthDate)) { 
                    return Mono.error(new YakeenRowadException(Errors.INCORRECT_ID_BIRTH_DATE_G, birthDate.toString()));
                }
                return Mono.just(personInfo);
            });
}

Не проверять во время выборки, проверка является бизнес-логикой c, и должна быть на уровне выше.

  1. вы извлекать и возвращать
  2. вы проверяете.
  3. Если проверка завершается неудачно, вы возвращаете Mono.error () вызывающему клиенту.

Понятия не имею, что " Метаданные "должен был быть. Я надеюсь, что это не URL, потому что указывать его неверно.

(старайтесь избегать многословных имен)

...