我从REST API获取一个递归字典,我使用Jackson使用以下代码在Java中导入为Map<String,Object>
private static final ObjectMapper OBJECTMAPPER = new ObjectMapper();
private static final MapType GENERICMAPTYPE = OBJECTMAPPER.getTypeFactory().constructMapType(
Map.class, String.class, Object.class);
...
Map<String, Object> response = OBJECTMAPPER.readValue(result.getBody(),GENERICMAPTYPE);
然后我尝试在树中找到一些属性,代码如
if (response.get("infos") instanceof Map<?,?>)
Map<String, Object> infos = (Map<String, Object>) response.get("infos");
我在地图上获得了类型安全警告。完全可以理解。
有没有比在这里添加@SuppressWarnings("unchecked")
更好的方法来告诉编译器一切正常?
答案 0 :(得分:1)
在您的情况下,response
是Map<String, Object>
。
您正在呼叫response.get("infos")
。从提供的泛型返回Object
,必须将其转换为Map,这就是您收到警告的原因。
您可以做的是不使用Map<String, Object>
,而是定义表示响应JSON结构的类。
像
这样的东西public class Response {
private Infos infos;
}
public class Infos {
private int foo;
private String bar;
}
然后,您可以使用Jackson将响应解析为此类结构,并通过getter / setter访问所有属性,确保您的代码是类型安全的。
答案 1 :(得分:0)
根据fge的评论,杰克逊JsonNode类型是正确的方法。
JsonNode responseAsTree = OBJECTMAPPER.readTree(responseAsString);
JsonNode具有以简单方式遍历树所需的所有方法。见Faster XML Tutorial