java - 删除 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,
    "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/

相关文章:

Java 8 Streams - 比较两个列表的对象值并将值添加到新列表?

java - 从 Java 使用 Scala : passing functions as parameters

java - 400 错误请求 - 将 JSON 数据发布到使用 Spring MVC 实现的 RESTful Controller 时

java - 关于 Tetration 的问题

python - 如何使用 minidom 读取具有属性的 XML 标签的值

PHP XML 在另一个元素之后(或之前)插入元素

xml - 使用 xsl 计算 xml 节点中的单词数

json - JSON 字符串中的二进制数据。比 Base64 更好的东西

javascript - 在本地存储中创建多项目 JSON 对象

json - 如何在 Swift 4 的可解码协议(protocol)中使用自定义键?