gpt4 book ai didi

java - Jackson 多态反序列化预计为 START_ARRAY

转载 作者:太空宇宙 更新时间:2023-11-04 14:30:00 27 4
gpt4 key购买 nike

我需要像这样反序列化 Json:

{  
"arrayObj1":[
{
"type":"t1",
"value":[
{
"value1":"a"
},
{
"value2":"b"
}
],
"otherInfo":"abc"
}
]
}

这就是我尝试做的事情:

public class ClassA{
private ArrayObj1[] arrayObj1;}

然后...

    public class ArrayObj1 extends Value{
private String type;
private Value [] value;

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type")
@JsonSubTypes(value={
@JsonSubTypes.Type(value = T1.class, name = "t1")
})
public void setValue (Value [] value){
this.value = value;
}
}

还有...

public abstract class Value {}

这是我得到的错误:com.fasterxml.jackson.databind.JsonMappingException:意外的 token (START_OBJECT),预期的START_ARRAY:需要JSON数组来包含类的As.WRAPPER_ARRAY类型信息...等

如何处理这个问题?谢谢。

编辑:这就是我反序列化的方式:

public ClassA getObj (String jsonString) {
ClassA obj = null;
try {
obj = new ObjectMapper().readValue(jsonString, ClassA.class);
} catch (IOException e) {
e.printStackTrace();
}
return obj;
}

完整错误是:

com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class .Value at [Source: java.io.StringReader@4317b868; line: 1, column: 496] (through reference chain: .ClassA["arrayObj1"]->.ArrayObj1["value"])

最佳答案

考虑到您使用的结构,您实际上需要多一级类来包含外部类型 ID。所以像这样:

public class ClassA {
private ValueWrapper[] arrayObj1;
}

public class ValueWrapper {
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type")
@JsonSubTypes(value={
@JsonSubTypes.Type(value = T1.class, name = "t1")
}
public Value value;

public String otherInfo;

// or use getters/setters in addition; left as fields for brevity
}

public abstract class Value { ... }

)

但是,更仔细地查看您的 JSON,实际上只有当您的值是 POJO 时,这才有效。如果假设类型适用于 value 数组的所有元素,则没有自动方法可以做到这一点。不幸的是,您需要手动处理多态类型。

关于java - Jackson 多态反序列化预计为 START_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26251486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com