gpt4 book ai didi

java - 从父类(super class)继承@JsonCreator注解

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:00 25 4
gpt4 key购买 nike

我在父类(super class)中有许多具有一组共享属性的对象:

public Superclass {
int id;
String name;
...
}

我有继承自父类(super class)的子类,但每个子类都需要自己完整描述的@JsonCreator

public Subclass1 extends Superclass {
String color;

@JsonCreator
public Subclass1(@JsonProperty("id") int id,
@JsonProperty("name") String name,
@JsonProperty("color") String color)
{
super(id, name);
this.color = color;
}
}

public Subclass2 extends Superclass {
int height;

@JsonCreator
public Subclass1(@JsonProperty("id") int id,
@JsonProperty("name") String name,
@JsonProperty("height") int height)
{
super(id, name);
this.height = height;
}
}

Jackson (2.x) 是否有任何方法可以从父类(super class)中提取有关预期 JSON 字段的信息并避免这种重复?

最佳答案

由于您的类似乎不是不可变的,您可以在基类中的 setter 方法上为“id”和“name”属性添加 @JsonSetter 注释。然后反序列化将创建适当的子类型并使用 setter 而不是构造函数。

public class Superclass {
private int id;
private String name;

@JsonSetter
public void setId(int id) { ... }

@JsonSetter
public void setName(String name) { ... }
}

public Subclass1 extends Superclass {
private String color;

@JsonSetter
public void setColor(String color) { ... }
}

public Subclass2 extends Superclass {
private int height;

@JsonSetter
public void setHeight(int height) { ... }
}

您也可以使用@JsonSubTypes。此注释将继续在父类(super class)上,您将必须列出对每个子类型(Subclass1 和 Subclass2)的引用。我不知道这是否允许您在父类(super class)中利用 @JsonCreator 来避免在子类中重复“id”和“name”属性,但我认为值得一试。这种方法的缺点是您的基类具有对子类型的显式引用。

关于java - 从父类(super class)继承@JsonCreator注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17528581/

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