Веб-клиент Spring5 делает несколько вызовов зависимыми друг от друга с помощью комбинации - PullRequest
0 голосов
/ 18 марта 2020

У меня есть простая java программа, которая использует две службы, и я хочу вызвать эти службы и объединить полученный результат и применить некоторые проверки. Я совсем новичок в весеннем реактивном программировании, поэтому, пожалуйста, дайте мне знать, если есть ошибки в написанном коде

Первый ответ службы (api / v1 / employee / Participation)

{
  "empoyeeResponse": {
    "participatedEmployee": [
      {
        "employeeNumber": 1
      },
      {
        "employeeNumber": 2
      }
    ]
  },
  "totalActiveEmployee": 10
}

Второй Ответ службы (api / v1 / employee /: employeeNumber)

{
    "name":"John",
    "age":26,
}

Я хочу создать службу, которая возвращает список участвующих сотрудников, чей возраст более 30

{
    "participatedEmployee":[
        {
            "name":"jack",
            "age":33
        }
    ]
}

ниже моего try

public serviceClient() {
    this.webClient = WebClient.builder().baseUrl("http://localhost:8080/api/v1")
            .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .build();
}


public Mono<EmployeeListResponse> getEmployeeList() {
    return this.webClient.get().uri("/employee/participation")
            .retrieve().bodyToMono(EmployeeListResponse.class);
}

public Mono<EmpolyeeInfo> getEmployeeInfo(Integer id){
    return this.webClient.get().uri("/employee/{id}", id)
            .retrieve().bodyToMono(EmpolyeeInfo.class);
}

public Mono<Void> customService(){
    return this.getEmployeeList()
            .map(EmployeeListResponse::getEmpoyeeResponse)
            .flatMapIterable(EmployeeResponse::getParticipatedEmployee)
            .map(Employee::getEmployeeNumber)
            .flatMap(this::getEmployeeInfo)
            .then();
}

Я хочу изменить вывод для метода нестандартного сервиса, чтобы он возвращал Mono of EmpoyeeNewResponse и подать заявку, чтобы проверить, что Сотрудник, наиболее превышающий 30 лет, в противном случае сотрудник не будет добавлен в список

1 Ответ

0 голосов
/ 18 марта 2020

Ноль или один сигнал

public Mono<List<EmpolyeeInfo>> customService(){
    return this.getEmployeeList()
            .map(EmployeeListResponse::getEmpoyeeResponse)
            .flatMapIterable(EmployeeResponse::getParticipatedEmployee)
            .map(Employee::getEmployeeNumber)
            .flatMap(this::getEmployeeInfo)
            .filter(user -> user.age > 30)
            .collectList();
}

или

Ноль или N сигналов

public Flux<EmpolyeeInfo> customService(){
    return this.getEmployeeList()
            .map(EmployeeListResponse::getEmpoyeeResponse)
            .flatMapIterable(EmployeeResponse::getParticipatedEmployee)
            .map(Employee::getEmployeeNumber)
            .flatMap(this::getEmployeeInfo)
            .filter(user -> user.age > 30);
}
...