我在我的项目中使用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“]”
答案 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();