2017-01-03 113 views
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) 

这是可能的,以及如何?

回答

0

我想你想用这个configuration option

mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false); 

它将取代未知子类型为null。

+0

我猜我还有另一个问题。我已将FAIL_ON_INVALID_SUBTYPE和FAIL_ON_UNRESOLVED_OBJECT_IDS设置为false,但仍然收到错误com.fasterxml.jackson.databind.JsonMappingException:无效的类型ID'that.subtype.which.is.no.lhere.There' –

+0

您是否确定这些选项是什么被应用于正确的映射器? –

+0

只有一个映射器,所以我尽可能的确定。我应该说,我通过jsonMapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.NON_FINAL,“class”)使用类名解析子类型。虽然我不知道这是否有任何区别。 –

相关问题