在jaxb中删除输出中的外层元素

时间:2014-07-08 20:03:05

标签: java xml json jaxb

默认情况下,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

提前谢谢。

1 个答案:

答案 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