默认情况下,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
。
提前谢谢。
答案 0 :(得分:0)
删除包装器可能非常困难,因为编组和解组过程不知道在哪里查找属性。对此@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;
}
}
如果您使用的是speedxml(com.fasterxml.jackson.annotation
),请查看@JsonIgnore
和@JsonProperty