我想向Java对象插入REST API响应。我的示例响应如下。
{
"key1": [
{
"name": "test1",
"id": "id1",
}
],
"key2": [
{
"name": "test2",
"id": "id2",
},
{
"name": "test3",
"id": "id3",
}
]
}
为此,我创建了“ User”类来重复对象
@Data
public class User {
private String name;
private String id;
}
API响应主体仅接受Class<T>
,为此,我将其解析Map.class
为该函数,因为我想向其中插入json响应数据,Map<String, List<User>>
而不是java类对象。
public Mono<Map> getUserInfo(String number) {
return apiAdaptor.getRequest(urlConfiguration.getUserApi(), Map.class, true
, number);
}
public <T> Mono<T> getRequest(String url, Class<T> responseClass, boolean isDds,
String... urlArgs) {
return Mono.just(this.accessToken)
.flatMap(token -> this.webClient.get()
.uri(url, urlArgs)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.exchange()
.flatMap(clientResponse -> getClassResponse(clientResponse, responseClass, isDds))
);
}
private UserResponse handleSuccess(Map map) {
Map<String, List<User>> apiRes = map;
}
但是,当我遍历API响应(apiRes
)时,它给出了“无法将java.util.LinkedHashMap强制转换为User”。正如我检查的那样,如果Jackson无法确定确切的格式,它将自动转换为“ LinkedHashMap”。请帮忙。
请注意,我是Java开发的新手。
一种技巧是声明自己的类,以保留要正确编译和强制转换的泛型类型。像这样:
@SuppressWarnings("serial")
public class DynKeyUserMap extends HashMap<String, List<User>> {}
然后代替Map.class
使用DynKeyUserMap.class
来防止铸造问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句