gpt4 book ai didi

json - 如何使用 Spring WebClient 按名称获取 json 字段?

转载 作者:行者123 更新时间:2023-12-04 11:31:20 28 4
gpt4 key购买 nike

我有以下 JSON 响应:

{
"Count": 1,
"Products": [
{
"ProductID": 3423
},
{
"ProductID": 4321
}
]
}

我希望能够使用 WebClient 从 Products 数组中返回一个“Product”列表,而不必创建一个带有“ArrayList products”字段的单独 Dto 类

我用过这样的东西
        webClient.get()
.uri(uriBuilder -> uriBuilder
.path(URI_PRODUCTS)
.build())
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(Product.class)
.collectList();

它检索一个包含一个产品的列表,但所有值都为空。我能够让它与 DTO 响应一起工作,例如
...retrieve().bodyToMono(ProductResponse.class).block();

ProductResponse 中包含产品列表。但我试图避免创建额外的类。有没有办法类似于使用jsonPath(类似于WebTestClient)来拉取字段?

最佳答案

之后 retrieve()您可以随时.map你的结果对应的类型。在 JsonNode 的帮助下path()实例方法,你可以做到类似于 WebTestClient jsonPath()

webClient.get()
.uri(uriBuilder -> uriBuilder
.path(URI_PRODUCTS)
.build())
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(JsonNode.class)
.map(s-> s.path("Products"))
.map(s->{
try {
return mapper.readValue(s.traverse(), new TypeReference<List<Product>>() {} );
} catch (IOException e) {
e.printStackTrace();
return new ArrayList<Product>();
}
})
.block();

关于json - 如何使用 Spring WebClient 按名称获取 json 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659473/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com