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
围绕您需要的数据包装。在这里,您仅提取所需字段(
_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