0
使用Jackson,我将一个对象序列化为JSON。 JSON序列化的父对象内部是一个抽象类的某个子类型的对象。使用jackson处理json反序列化中的缺失类
@JsonTypeInfo(
use = JsonTypeInfo.Id.CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "@class")
public abstract class AbstractSupertype{...}
public class ActualSerializedSubObject extends AbstractSypertype{...}
我的对象图会再看看像
Parent object
|-> ChildObject
|->ActualSerializedSubObject (Or some other subtype of AbstractSupertype)
的问题是,对于各种OSGi相关的原因,具体亚型和对象是使用序列化,并不总是可用时,它就是后来的反序列化为一个对象。 当杰克逊正确地抛出异常时com.fasterxml.jackson.databind.JsonMappingException
。
我想要的是,对于这个特定的领域,当类未找到时,不会抛出异常,但该字段被设置为null,并且允许解析继续。该对象的任何剩余的json应该被丢弃,并替换为null。
Parent object
|-> ChildObject
|->null (No exception is thrown, the object is set set null)
这是可能的,以及如何?
我猜我还有另一个问题。我已将FAIL_ON_INVALID_SUBTYPE和FAIL_ON_UNRESOLVED_OBJECT_IDS设置为false,但仍然收到错误com.fasterxml.jackson.databind.JsonMappingException:无效的类型ID'that.subtype.which.is.no.lhere.There' –
您是否确定这些选项是什么被应用于正确的映射器? –
只有一个映射器,所以我尽可能的确定。我应该说,我通过jsonMapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.NON_FINAL,“class”)使用类名解析子类型。虽然我不知道这是否有任何区别。 –