无法从Flux <String>转换为List <String>

时间:2019-08-23 13:20:50

标签: spring spring-webflux

我在我的项目中使用Spring webflux与外部API通信。 在我的项目中,我无法将Flux转换为List。

在尝试使用collectList()。block()进行相同操作时,磁通量的所有元素都串联到单个字符串中,并存储在list的第0个索引处。 如果我返回Flux而不是List,则它将发送预期的响应。但是我需要操纵内容并将其作为子对象添加到其他对象中,并因此尝试返回列表。

public List<String> retrieveWebLogin(String platformId) {
    try {
        ClientResponse response = webClient
                .get()
                .uri(EV_LEGACY_WEB_RTC_ENDPOINT_API_PATH)
                .accept(APPLICATION_JSON)
                .exchange().block();

        Flux<String> uriFlux = response.bodyToFlux(String.class);

        List<String> uriList = uriFlux.collectList().block();
        return uriList;

    } catch (Exception e) {
        logger.info(e.getMessage(), e);
    }
    return null;
}

预期结果: [     “ agent1”,     “ agent2” ]

实际结果: “ [” agent1“,” agent2“]”

1 个答案:

答案 0 :(得分:1)

您的代码应该看起来像这样。

final List<String> uriList = webClient
            .get()
            .uri(EV_LEGACY_WEB_RTC_ENDPOINT_API_PATH)
            .accept(MediaType.APPLICATION_JSON_UTF8)
            .exchange()
            .flatMap(response -> response.bodyToMono(new ParameterizedTypeReference<List<String>>() {}))
            .block();