Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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_Json_Jackson_Jackson Databind - Fatal编程技术网

Java “杰克逊反序列化”;“简单类型”;列举

Java “杰克逊反序列化”;“简单类型”;列举,java,json,jackson,jackson-databind,Java,Json,Jackson,Jackson Databind,我有一个普通班 public CommonClass { private Enum<?> field1; private String field2; private String field3; private Map<? extends Enum<?>, Map<String, Object>> map; // constructor, getters setters } 以及要在it类中解析的json

我有一个普通班

public CommonClass {
    private Enum<?> field1;
    private String field2;
    private String field3;
    private Map<? extends Enum<?>, Map<String, Object>> map;
    // constructor, getters setters
}
以及要在it类中解析的json

{
  "field1": "FIELD",
  "field2": "field2",
  "field3": "field2",
  "map": {
    "ENUM1": {
           // some inner data
      },
    "ENUM2":{
          // some inner data
    }
   }
}
当我试图将这个JSON解析为一个对象时,我遇到了一个异常

java.lang.IllegalArgumentException: No enum constants for class java.lang.Enum
当Jackson试图反序列化“ENUM1”时会发生此异常,ENUM1是一个?将枚举扩展到B
当我调试它时,Jackson认为这个属性是简单类型

有什么建议说明它为什么不起作用吗?

我认为默认情况下,即使是这个简化的文件,您也无法反序列化:

public class CommonClass {
    private Enum<?> field1;     
}
这会起作用,因为Jackson看到enum的类型是
A
,我猜,这会使它像:

A.valueOf("FIELD");
正如你在这里看到的,
A
是静态的<代码>枚举s是静态的,它们的值也是最终值


如果要反序列化任意通用枚举值
enum
,则需要使用自定义反序列化器来确定枚举类型,并与值和获取枚举实例(如上所述)一起使用。您可能还需要一个自定义序列化程序,该程序还序列化了自定义反序列化程序要读取的类型。

Jackson反序列化了Enum field1,没有任何问题。它无法反序列化映射中的键,映射>map@TarasDanylchenko你试过我的简化课程吗?这对我不起作用。
public class CommonClass {
    private A field1;       
}
A.valueOf("FIELD");