2016-03-07 111 views
3

我使用数据绑定杰克逊2.7.2,我有一个接口上的以下注释:避免JsonTypeInfo产生的重复字段杰克逊

@JsonTypeInfo(
     use = JsonTypeInfo.Id.NAME, 
     include = JsonTypeInfo.As.PROPERTY, 
     property = "type") 
@JsonSubTypes({ 
     @JsonSubTypes.Type(value = SubType1.class, name = "SubType1"), 
     @JsonSubTypes.Type(value = SubType2.class, name = "SubType2")}) 
public interface Common { 
    String getType(); 
} 

getType被覆盖(实现)在SubType1SubType2。问题是,当SubType1SubType2实例映射到JSON它包含两个字段名为type具有相同值:

{ 
    "type" : "SubType1", 
    ... // Other properties 
    "type" : "SubType1" 
} 

如何防止杰克逊渲染重复的领域?

回答

-1

Jackson因为已经在JsonTypeInfo注释中告诉了它,所以再次呈现该类型,因为它看到了一个吸气剂,因此它在getType()上运行它的魔法并添加了另一个属性。如果你把@JsonIgnore上的接口中的方法,它会一次使它:

@JsonTypeInfo(
     use = JsonTypeInfo.Id.NAME, 
     include = JsonTypeInfo.As.PROPERTY, 
     property = "type") 
@JsonSubTypes({ 
     @JsonSubTypes.Type(value = SubType1.class, name = "SubType1"), 
     @JsonSubTypes.Type(value = SubType2.class, name = "SubType2")}) 
public interface Common { 
    @JsonIgnore 
    String getType(); 
} 

产地:

{"type": "SubType1"}