Jackson 序列化後的 JSON 出現重複的屬性
接續之前的文章,發現 Polymorphic 物件序列化後,用來判斷物件類別的屬性被重複輸出了兩次。
根據這篇文章的說法,Jackson 在續列化時會根據 @JsonSubTypes.Type
的值先輸出 action
屬性,接著才把物件內容序列化。碰巧該物件也有一個 action
屬性,所以被輸出了兩次。會發生這樣的問題是因為 action
被同時用來判斷物件類別以及其他用途。
要解決很簡單,同一篇文章就有答案了。把 @JsonTypeInfo
裡的 JsonTypeInfo.As.PROPERTY
改成 JsonTypeInfo.As.EXISTING_PROPERTY
即可。如下
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, visible = true, property = "action")
@JsonSubTypes({
@Type(value = SendMessageAction.class, name = "sendMessage"),
@Type(value = LoginAction.class, name = "login")
})
abstract class Action {
protected String action;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}