缺省情况下,jaxb序列化此类
@XmlRootElement
public class MyWrapperClass {
public Existing existing;
public Long myField;
}
进入(例如):
{
"existing": {
"id": 42,
"fieldA": "the answer",
},
"myField": 0,
}
有没有办法使输出变成这样?
{
"id": 42,
"fieldA": "the answer",
"myField": 0,
}
(换句话说,删除外部的
existing
元素)请注意,
Existing
类不能更改。实际上,包装的原因是我们希望在输出中添加新字段
myField
。先感谢您。
最佳答案
删除包装程序可能非常困难,因为编组和解组过程不知道在哪里查找属性。 @Blaise Doughan将对此有更好的解释。
但是,我看到的最简单的方法是忽略existing
对象的编组并将其属性添加到您的MyWrapperClass
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
@XmlRootElement
public class MyWrapperClass {
@XmlTransient
public Existing existing;
public Long myField;
@XmlElement(name="id")
public int getExisitingId() {
return existing.id;
}
@XmlElement(name="fieldA")
public String getExistingFieldA() {
return existing.fieldA;
}
}
如果您使用的是fastxml(
com.fasterxml.jackson.annotation
),请查看@JsonIgnore
和@JsonProperty