0

getUserDetails 方法返回 JsonNode 类型的 Mono。但我实际上想返回 Mono<User.java> 或 Flux<User.java>。 请帮助修改 getBulkUserInfo 或 getUserDetails 以获取 Mono<User.java> 或 Flux<User.java>

public Mono<JsonNode> getUser(BigInteger Id){
    return this.client.get()
            .uri("/URL/{Id}",Id)
            .retrieve()
            .bodyToMono(JsonNode.class);
}

public Flux getBulkUsers(List<BigInteger> Ids){
    return Flux.fromIterable(Ids).flatMap(this::getUser);
}

但是来自 Url 的 json 响应类似于

{
"resultholder": {
            "totalResults": "1",
            "profiles": {
                "profileholder": {
                    "user": {
                        "country": "IND",
                        "zipCode": "560048",
                        "name":"Test"
                    }
                }
            }            
        }
}

我尝试了不同的方法,但没有任何效果 subscribe() 和 .doOnNext(resp -> resp.get("resultholder").get("profiles").get("profileholder").get("user"))

    .bodyToMono(JsonNode.class)
.doOnNext(resp ->{return
 JSONUtils.deserialize(resp.get("resultholder").get("profiles").get("profileholder").get("user"), User.class)})
4

1 回答 1

0

这非常简单,无需阻止。它只是对响应应用进一步的映射。您可以使用以下代码解决您的问题

 return webClient
            .get()
            .uri("profilesEndPoint/" + id)
            .retrieve()
            .bodyToMono(JsonNode.class)
            .map(jsonNode ->
                    jsonNode.path("resultholder").path("profiles").path("profileholder").path("user")
            ).map(
                    userjsonNode -> mapper.convertValue(userjsonNode, User.class)
            );

映射器在哪里是杰克逊 ObjectMapper

私有最终 ObjectMapper 映射器 = 新 ObjectMapper();

如果您有任何问题,请在此处参考此代码:

于 2022-01-19T00:16:57.673 回答