簡體   English   中英

傑克遜注釋基於另一個字段決定一個字段類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM