如何解决嵌套的 TypeReference 在 RestTemplate 和 ObjectMapper 之间不起作用
使用Spring RestTemplate的execute方法作为:-
RestTemplate template = new RestTemplate();
List<Feed> Feeds = template.execute(inApiUrl,HttpMethod.GET,new CustomrequestCallback(inEncryptedApiKey),new CustomresponseExtractor<List<Feed>>());
public static class CustomresponseExtractor<T> implements ResponseExtractor<T> {
@Override
public T extractData(ClientHttpResponse inResponse) throws IOException {
String json = IoUtils.toString(inResponse.getBody());
if (StringUtils.isEmpty(json)) {
return null;
}
T data = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNowN_PROPERTIES,false);
// THIS IS WHERE THE GENERIC T IS NOT GETTING CAPTURED CORRECTLY
data = objectMapper.readValue(json,new TypeReference<T>(){});
} catch (Exception e) {
LOGGER.error("Error ... ",e);
}
return data;
}
}
响应看起来像:-
[{ "id": 8,"name": "Dev","writeAccess": true },{ "id": 1,"name": "Default Feed","writeAccess": false }]
Feed 对象:-
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"id","name","writeAccess"
})
public class Feed {
@JsonProperty("id")
private Integer _id;
@JsonProperty("name")
private String _name;
@JsonProperty("writeAccess")
private Boolean _writeAccess;
public Integer getId() {
return _id;
}
public void setId(Integer inId) {
_id = inId;
}
public String getName() {
return _name;
}
public void setName(String inName) {
_name = inName;
}
public Boolean getWriteAccess() {
return _writeAccess;
}
public void setWriteAccess(Boolean inWriteAccess) {
_writeAccess = inWriteAccess;
}
}
此设置导致数据为 LinkedHashMap 列表而不是 Feed 列表(自定义对象)
我不是在寻找解决办法。我想知道为什么这不起作用?
注意:将 new TypeReference>(){} 直接提供给 objectMapper.readValue() 有效
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。