默认情况下,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,
}
(换句话说,删除外部现有
元素)
请注意,现有
类无法更改。
实际上,换行的原因是我们希望输出中出现新字段 myField
。
提前谢谢您。
最佳答案
删除包装器可能非常困难,因为编码和解码过程不知道在哪里寻找属性。对此有一个更好的解释:@Blaise Doughan就会知道。
但是,我认为执行此操作的最简单方法就是忽略现有
对象的编码并将其属性添加到您的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;
}
}
如果您使用fasterxml (com.fasterxml.jackson.annotation
),请查看@JsonIgnore
和 @JsonProperty
关于java - 删除 jaxb 输出中的外层元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640789/