【发布时间】:2021-03-24 09:53:57
【问题描述】:
我想向 java 对象插入一个 REST API 响应。我的示例响应如下。
{
"key1": [
{
"name": "test1",
"id": "id1",
}
],
"key2": [
{
"name": "test2",
"id": "id2",
},
{
"name": "test3",
"id": "id3",
}
]
}
为此,我为重复对象创建了“用户”类
@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 无法转换为用户”。正如我检查的那样,如果杰克逊无法识别确切的格式,它将自动转换为“LinkedHashMap”。请帮忙。
请注意,我是 Java 开发新手。
【问题讨论】:
-
你能补充一下,API 响应正文只接受 Class
是什么意思?如果您将对象定义为 Map,它就是Map(所以LinkedHashMap)并且不会有任何额外的类型信息。每个 complex 值也将是Map,并且无法将其转换为User。 -
请发布您正在使用的代码,它会给出您的错误
-
@pirho 更新了问题。
-
@Toerktumlare 更新了问题。
标签: spring-boot spring-mvc java-8 spring-webflux