【发布时间】:2018-06-25 08:08:45
【问题描述】:
比方说,我有一堂课
public class A{
private UUID typeId;
private B data;
}
public abstract class B{
private String a;
}
public class BChildOne extends B{
... some variables
}
public class BChildTwo extends B{
... some variables
}
B类的类型在变化,根据A的typeId,所以如果A的typeId为“XXX”,则数据字段的类型为BChildOne,如果A的typeId为“YYY”,则数据字段的类型为BChildTwo。
我怎样才能做到这一点?
所以我试过了;
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility =
JsonAutoDetect.Visibility.NONE, setterVisibility =
JsonAutoDetect.Visibility.NONE)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include =
JsonTypeInfo.As.EXTERNAL_PROPERTY , property = "typeId")
@JsonSubTypes({
@JsonSubTypes.Type(value = BChildOne.class, name = "40ad2fe6-e672-4f0e-
986e-
619c7a1a3223") }
)
public abstract class B{
但我收到以下错误;
意外的令牌 (END_OBJECT),预期的 FIELD_NAME:缺少包含类型 ID 的属性“typeId”(对于 B 类)
这很明显,因为 typeId 字段属于 A 类而不是 B。
【问题讨论】:
-
有必要用Jackson做这个多态执行吗?我猜你可以手动完成。如果它具有非常酷的开箱即用多态功能,我没有更深入的杰克逊知识
-
扩展B类的子类可以超过一百个。这就是我尝试实施通用解决方案的原因。
标签: java jackson deserialization fasterxml