我有一些在超类中具有一组共享属性的对象:
public Superclass {
int id;
String name;
...
}
Run Code Online (Sandbox Code Playgroud)
我有从超类继承的子类,但每个子类都需要自己完整描述的@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;
}
}
Run Code Online (Sandbox Code Playgroud)
杰克逊(2.x)有没有办法从超类中提取有关预期JSON字段的信息并避免这种重复?
由于您的类似乎不是不可变的,因此您可以在基类中的“id”和“name”属性的 setter 方法上添加 @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) { ... }
}
Run Code Online (Sandbox Code Playgroud)
您也许也可以使用@JsonSubTypes。该注释将出现在超类上,并且您必须列出对每个子类型(Subclass1 和 Subclass2)的引用。我不知道这是否允许您在超类中利用 @JsonCreator 来避免在子类中重复“id”和“name”属性,但我认为值得一试。这种方法的缺点是您的基类具有对子类型的显式引用。
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |