[英]Jackson Annotation decide on one field class based on another field
我對類AbstractAsset有多種實現
我想根據類型選擇資產展示。 我設法做到了繼承和
@JsonSubTypes
問題是,在資產中,我已經有相同類型的字符串,這使得它
@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = TitleAssetDTO.class, name = "TITLE"),
@JsonSubTypes.Type(value = VideoAssetDTO.class, name = "VIDEO"),
@JsonSubTypes.Type(value = ImageAssetDTO.class, name = "IMAGE"),
@JsonSubTypes.Type(value = DataAssetDTO.class, name = "DATA")
})
@AllArgsConstructor
@NoArgsConstructor
public abstract class AbstractAssetDTO {
@NotNull private String type;
@NotNull private String key;
}
例如
public class TitleAssetDTO extends AbstractAssetDTO {
private Title title;
public Title getTitle() {
return title;
}
public void setTitle(Title title) {
this.title = title;
}
public TitleAssetDTO() {
this.title = new Title();
}
@Data
public class Title {
private Integer maxLength;
}
@JsonIgnore
public int getMaxLength() {
return title.maxLength;
}
}
問題是其他資產類型作為json中它們內部的類型字符串,因此我認為使用繼承不是解決此問題的正確方法,例如:
class myClass{
String type;
AbstractAsset asset;
}
將是實現此目標的更好方法,我該怎么做?
如果我理解正確,則您與type
字段發生名稱沖突。 然后為prop類型使用不同的名稱: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.