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");