当从子类构造XML时,是否可能没有父类中的少数字段? 但是,当从父类构造XML时,元素应该存在吗?
实施例
父类
@XmlRootElement(name = "location")
@XmlType(propOrder = { "id", "name" })
@JsonPropertyOrder({ "id", "name" })
public class Parent {
private Integer id;
private String name;
@XmlElement(name = "id", nillable = true)
@JsonProperty("id")
public Integer getId() {
return super.getId();
}
@JsonProperty("id")
public void setId(Integer id) {
super.setId(id);
}
@XmlElement(name = "name", nillable = true)
@JsonProperty("name")
public String getName() {
return name;
}
@JsonProperty("name")
public void setName(String name) {
this.name = name;
}
}
Child class
@XmlRootElement(name = "location")
@XmlType(propOrder = { "id" })
@JsonPropertyOrder({ "id" })
public class Child extends Parent {
@XmlElement(name = "id", nillable = true)
@JsonProperty("id")
public Integer getId() {
return super.getId();
}
@JsonProperty("id")
public void setId(Integer id) {
super.setId(id);
}
}
从子类构造XML时,我不想要名称字段。但是,当从父类构造XML时,它应该存在。
答案 0 :(得分:0)
尝试覆盖子类中name
的getter和setter,并使用@JsonIgnore
和/或@XmlTransient
对其进行注释。
修改
实际上,@XmlTransient
不能像我预期的那样使用多态(和@JsonIgnore
一样)。您可以尝试的是:
- 将Parent
类的所有内容移动到抽象Base
类
- 将Base
标记为@XmlTransient
- 使Parent
扩展Base
并向其添加任何内容
- 使Child
延长Base
这是我工作的一些合成例子。它可以很容易地翻译成您的特定类。
班级Base
@XmlRootElement(name = "location")
@XmlSeeAlso(value = {Parent.class, Child.class})
@XmlTransient
public abstract class Base {
private String a;
private String b;
@XmlElement(name = "a")
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
@XmlElement(name = "b", nillable = true)
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
班级Parent
@XmlRootElement(name = "location")
@XmlType
public class Parent extends Base {
}
班级Child
@XmlRootElement(name = "location")
@XmlType
public class Child extends Base {
private String c;
@XmlElement(name = "c")
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
@Override
@XmlTransient
public String getB(){
return super.getB();
}
@Override
public void setB(String b) {
super.setB(b);
}
}
显然,如果类层次结构越来越大,维护这样的解决方法可能会更困难。在这些情况下,您可能会考虑选择组合而不是继承。