缺省情况下,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

10-07 12:25