2015-09-23 80 views
3

我對父類此配置:傑克遜Polymorfic @JsonTypeInfo類型的屬性總是空

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME, 
include = JsonTypeInfo.As.EXISTING_PROPERTY, 
property = "type", 
visible = true 
) 
@JsonSubTypes({ 
@JsonSubTypes.Type(value = AnalysisViewer.class, name = "ANALYSIS"), 
@JsonSubTypes.Type(value = CombinedAnalysisViewer.class, name = "COMBINED"), 
@JsonSubTypes.Type(value = SingleSourceViewer.class, name = "SINGLESOURCE"), 
@JsonSubTypes.Type(value = SingleSourceGroupViewer.class, name = "SINGLESOURCE_GROUP") 
}) 

和類具有以下屬性type我需要在數據庫中(與JPA)堅持。

public class Viewer { 
    ... 
    @Column(name = "TP_VIEWER") 
    @Enumerated(EnumType.STRING) 
    private ViewerTypeEnum type; 
    ... 
} 

有了這個配置或更改爲visible=falseinclude=JsonTypeInfo.As.PROPERTY我要麼讓說這是不可能寫同一個屬性的兩倍,或者一個錯誤說我不能保存空值的序列化錯誤在type列中。

我需要的是在數據庫中具有type屬性,並用它教授Jackson的子類型。我嘗試了很多不同的配置,並且找不到有關保留和填充反序列化屬性的文檔。有人可以幫助我嗎?

在此先感謝。

回答

4

將參數visible添加到@JsonTypeInfo並使其爲true。缺省情況下它是false

@JsonTypeInfo(..., visible = true) 

JsonTypeInfo文檔:

屬性定義是否類型標識符值將作爲串並轉換器(真)JSON流的一部分來傳遞,或處理和通過除去TypeDeserializer(false)。屬性對序列化沒有影響。

默認值爲false,表示Jackson處理並從傳遞給JsonDeserializer的JSON內容中刪除類型標識符。