gpt4 book ai didi

java - jackson 注释根据另一个字段决定一个字段类

转载 作者:行者123 更新时间:2023-12-02 02:42:54 25 4
gpt4 key购买 nike

我有 AbstractAsset 类的多个实现

我想根据类型选择 Assets 实现。我成功地通过继承和

@JsonSubTypes

问题是,在 Assets 的几个内部我已经有相同类型的字符串,这使得它

@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;
}
}

问题是其他 Assets 类型作为 json 中它们内部的类型字符串,因此我认为使用继承并不是解决此问题的正确方法,复合如下:

class myClass{ 
String type;
AbstractAsset asset;
}

这将是一个更好的方法来实现这一点,我该怎么做?

最佳答案

如果我理解正确的话,您与 type 字段存在名称冲突。然后只需为 type prop 使用不同的名称:@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type")

关于java - jackson 注释根据另一个字段决定一个字段类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57167676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com