webcliet 多级泛型反序列化问题
一般的请求:
public <T> Mono<Result<List<T>>> parseArray(String path, String method,
JSONObject request, Class<T> clazz) {
return client().post().uri(url)
.body(BodyInserters.fromValue(request))
.retrieve()
.bodyToMono(
new ParameterizedTypeReference<Result<List<T>>>() {});
}
期望返回 Result 中 List 的范型, 但是 这个 T 并不是普通的 POJO 类型,而是 LinkedHashMap 类型,会造成 类型转换失败
解决方案
再对里面的T 再进行反序列化一下 :
public <T> Mono<Result<List<T>>> parseArray(String path, String method,
JSONObject request, Class<T> clazz) {
return client().post().uri(url)
.body(BodyInserters.fromValue(request))
.retrieve()
.bodyToMono(
new ParameterizedTypeReference<Result<List<T>>>() {})
.map(rs -> {
rs.setData(JSON.parseArray(JSON.toJSONString(rs.getData()), clazz));
return rs;
});
}