Реактивная пружина: преобразовать флюсПоток <X> - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть конечная точка: /upstreams

Она вернет Json в формате:

{
  "next" : "String",
  "data" : [
    {
       "id" : "String",
       "name" : "String"
    }
  ]
}

У меня есть несколько таких конечных точек, поэтому я создаю класс-оболочку

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseWrapper<T> {

    private List<T> data;

    private String next;

}

Для ответа /upstream, указанного выше, тип данных Upstream

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Upstream extends Node {

    private String id;

    private String name;

}

Теперь у меня есть служба, которая должна вернуть Flux<Stream> (или List<Stream>?), Поэтому ясоздать такой метод

@Override
public Flux<Stream> getAllNodes() {
    var endpoint = "/upstream";

    var response = webClient.get().uri(endpoint).retrieve()
            .bodyToMono(new ParameterizedTypeReference<ResponseWrapper<Upstream>>() {
            });

    return ???;
}

Как я могу преобразовать ResponseWrapper<Upstream>, чтобы он возвращал Flux<Stream> или List<Stream>?

Я предполагаю .flatMap() или map(), но как правильно использовать?

Большое спасибо

1 Ответ

0 голосов
/ 13 декабря 2018

Я считаю, что ваш var response - это Mono<ResponseWrapper<Upstream>>, так что-то вроде этого:

return response.flatMapMany(pesponseWrapper -> Flux.fromIterable(pesponseWrapper.getData()));
...