如何使用spring webclient从JSON响应中获取第一个列表项目

问题描述 投票:0回答:1
我在REST API中的响应低于响应,并希望使用Spring WebClient解析并返回第一个列表项目。

JSON响应

{"_embedded":{"service":[{"id":101,"serviceModelUUID":"aaa8884883","action":"create"},{"id":102,"serviceModelUUID":"aaa8884884","action":"delete"}]}}

我想返回响应以下
[{"id":101,"serviceModelUUID":"aaa8884883","action":"create"},{"id":102,"serviceModelUUID":"aaa8884884","action":"delete"}]

贝洛(Below
private <T> List<T> getMultipleResources(Class<T> clazz, URI uri) {
    return webClient.get().uri(uri).retrieve().bodyToFlux(clazz).collectList().block();
}

使用
ParameterizedTypeReference
spring spring-rest spring-webclient
1个回答
0
投票

围绕您需要的数据包装。在这里,您仅提取所需字段(

_embedded.service
)。

class DataWrapper<T> { private List<T> data; public List<T> getData() { return data; } @JsonProperty("_embedded") @SuppressWarnings("unchecked") private void unpackEmbedded(Map<String, Object> embedded) { this.data = (List<T>) embedded.get("service"); } }

使用`parameterizedTypereference'指定端点返回的预期数据类型。
private void howToUse() { List<Service> res1 = getMultipleResources(URI.create("/")); // prints for your example // [{id=101, serviceModelUUID=aaa8884883, action=create}, {id=102, serviceModelUUID=aaa8884884, action=delete}] System.out.println(res1); } private <T> List<T> getMultipleResources(URI uri) { ParameterizedTypeReference<DataWrapper<T>> typeRef = new ParameterizedTypeReference<>() {}; return webClient.get().uri(uri).retrieve().bodyToMono(typeRef).block().getData(); }

不要忘记定义您的班级 - 
Service

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.