2013-07-17 70 views
1

我有一個簡單的數據對象層次結構,必須將其轉換爲JSON格式。就像這樣:使用@JsonTypeInfo屬性發生意外的重複鍵錯誤

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "documentType") 
@JsonSubTypes({@Type(TranscriptionDocument.class), @Type(ArchiveDocument.class)}) 
public class Document{ 
    private String documentType; 
    //other fields, getters/setters 
} 

@JsonTypeName("ARCHIVE") 
public class ArchiveDocument extends Document { ... } 

@JsonTypeName("TRANSCRIPTIONS") 
public class TranscriptionDocument extends Document { ... } 

在JSON解析我遇到這樣一個錯誤: Unexpected duplicate key:documentType at position 339.,因爲在生成的JSON實際有兩種documentType領域。

應該更改什麼使JsonTypeName值出現在documentType字段中,沒有錯誤(例如替換其他值)?

傑克遜版本是2.2

回答

2

您的代碼不會表現出來,但我敢打賭,你的documentType財產在你Document類的getter。你應該註釋此獲取與@JsonIgnore像這樣:

@JsonIgnore 
public String getDocumentType() { 
    return documentType; 
} 

存在與每個子類有關的隱含documentType屬性,所以其在父類相同的屬性使其被序列化的兩倍。

另一種選擇是完全刪除getter,但我假設您可能需要它來執行某些業務邏輯,所以@JsonIgnore註釋可能是最佳選擇。

相關問題