Java 在反序列化递归映射后避免类型安全警告<;字符串,对象>;和杰克逊
我从RESTAPI获得了一个递归词汇表,我使用Jackson和以下代码在Java中作为Java 在反序列化递归映射后避免类型安全警告<;字符串,对象>;和杰克逊,java,jackson,Java,Jackson,我从RESTAPI获得了一个递归词汇表,我使用Jackson和以下代码在Java中作为Map导入 private static final ObjectMapper OBJECTMAPPER = new ObjectMapper(); private static final MapType GENERICMAPTYPE = OBJECTMAPPER.getTypeFactory().constructMapType( Map.class, String.c
Map
导入
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);
private static final ObjectMapper ObjectMapper=new ObjectMapper();
私有静态最终映射类型GENERICMAPTYPE=OBJECTMAPPER.getTypeFactory().constructMapType(
Map.class、String.class、Object.class);
...
Map response=OBJECTMAPPER.readValue(result.getBody(),GENERICMAPTYPE);
然后,我尝试在树中向下搜索一些属性,代码如下
if (response.get("infos") instanceof Map<?,?>)
Map<String, Object> infos = (Map<String, Object>) response.get("infos");
if(response.get(“infos”)实例映射)
Map infos=(Map)response.get(“infos”);
我在地图上看到一个类型安全警告。完全可以理解。
有没有比在这里添加
@SuppressWarnings(“unchecked”)
更好的方法来告诉编译器一切正常?在您的情况下,响应
是一个映射。
您正在调用response.get(“infos”)
。从提供的泛型中,这将返回对象
,必须将其强制转换为Map,这就是为什么会收到警告
您可以做的是不使用映射
,而是定义表示响应JSON结构的类
差不多
public class Response {
private Infos infos;
}
public class Infos {
private int foo;
private String bar;
}
然后,您可以使用Jackson将响应解析到这个类结构中,并通过getter/setter访问所有属性,确保您的代码是类型安全的。根据fge的评论,Jackson JsonNode类型是正确的选择
JsonNode responseAsTree = OBJECTMAPPER.readTree(responseAsString);
JsonNode具有以简单方式遍历树所需的所有方法。请参见为什么使用这种结构?Jackson有JsonNode
,你知道…JsonNode是正确的选择。谢谢