Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在反序列化递归映射后避免类型安全警告<;字符串,对象>;和杰克逊_Java_Jackson - Fatal编程技术网

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

我从RESTAPI获得了一个递归词汇表,我使用Jackson和以下代码在Java中作为
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是正确的选择。谢谢