我想创建一些具有几乎相同属性的类。例子: 1、A类,属性:String a、String b、String c、AnObject d 2、B类,属性:String a、String b、String c、OtherObject d
A类和B类的区别仅在于属性d。
我已经创建了一个类
public class C <T> {
private String a;
private String b;
private String c;
private T d;
}
然后,对于A类
public class A extends C<A> {
private SomeObject z;
}
对于B类
public class B extends C<B> {
private OtherObject z;
private Integer y;
}
但是,当我使用 jackson 将其制作为 JSON 时,它就成为一个问题。 A
变成这样:
{
"a": "",
"b": "",
"c": "",
"d": {
"a": null,
"b": null,
"c": null,
"z": ""
}
}
我想要实现的是:
{
"a": "",
"b": "",
"c": "",
"d": {
"z": ""
}
}
如何实现这一目标?
最佳答案
我在这里可以看到两种可能的解决方案:仅使用没有继承的泛型类或使用没有泛型的继承。
类A
和B
不必扩展类C
。这些冗余属性从父类(即 C
)进入 JSON 表示形式。
public class C <T> {
private String a;
private String b;
private String c;
private T d;
}
public class A {
private SomeObject z;
}
public class B {
private OtherObject z;
private Integer y;
}
// example of usage
C<A> a = new C<>();
a.setD(new A());
// and so on
C<B> b = new C<>();
b.setD(new B());
// and so on
另一种方法是使 A
和 B
成为 C
的子级,在这种情况下不必是通用的。
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = A.class, name = "a"),
@Type(value = B.class, name = "b")
})
public class C {
private String a;
private String b;
private String c;
}
public class A extends C {
private SomeObject z;
}
public class B extends C {
private OtherObject z;
private Integer y;
}
// example of usage
A a = new A();
B b = new B();
关于Java 使用通用基础模型创建模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58272243/