Java 在jaxb中删除输出中的外部级别元素
默认情况下,jaxb序列化这个类Java 在jaxb中删除输出中的外部级别元素,java,xml,json,jaxb,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
@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
提前感谢。删除包装可能非常困难,因为编组和解编组过程不知道在哪里查找属性。有一个更好的解释可以解释 然而,我看到的最简单的方法是忽略现有对象的编组,并将其属性添加到MyWrapperClass中
如果您使用的是fasterxml com.fasterxml.jackson.annotation,那么请看一看,这只是需要从中删除包装器的较大类的一个简短示例,还是您正在处理的实际类?该类基本上就是我正在使用的类。这有关系吗?好吧,现在我明白你评论的原因了。现有类有许多字段,可能会在稍后更新。这是否意味着我在这里运气不佳?
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;
}
}