java - 使用 JAXB/JAX-RS 将 XML 元素包装在子元素中

标签 java xml jaxb jax-rs

我有以下类,应将其序列化/反序列化为 XML。

@XmlRootElement(name = "nnxml")
@XmlAccessorType(XmlAccessType.FIELD)
public class InfoRequest {

    @XmlElement(name = "vendor_id")
    private String vendorId;

    @XmlElement(name = "vendor_authcode")
    private String authCode;
}

目前,这给了我这个一致且正确的 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nnxml>
    <vendor_id>vendor id</vendor_id>
    <vendor_authcode>auth code</vendor_authcode>
</nnxml>

但是我需要将 XML 元素包装在另一个元素中,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nnxml>
  <info_request>
      <vendor_id>vendor id</vendor_id>
      <vendor_authcode>auth code</vendor_authcode>
  </info_request>
</nnxml>

如何将上述字段包装在 info_request 元素中?我是否必须创建类似内部类的东西还是有更简单的方法?

最佳答案

一种方法是创建一个像这样的包装类并插入您的类

@XmlRootElement(name = "nnxml")
@XmlAccessorType(XmlAccessType.FIELD)
public class Nnxml implements Serializable {

    @XmlElement(name = "info_request")
    private InfoRequest request;
}

子类的注解是可选的

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "info_request", propOrder = {
        "vendorId",
        "authCode"
})
class InfoRequest implements Serializable{
    @XmlElement(name = "vendor_id")
    private String vendorId;

    @XmlElement(name = "vendor_authcode")
    private String authCode;
}

输出为

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nnxml>
    <info_request>
        <vendor_id>vendor id</vendor_id>
        <vendor_authcode>auth code</vendor_authcode>
    </info_request>
</nnxml>

关于java - 使用 JAXB/JAX-RS 将 XML 元素包装在子元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60620746/

相关文章:

java - 如何创建一个自定义alertDialog,其中的列表绑定(bind)到onClick事件android?

Java:如何在 org.w3c.dom 中用 <sometag> 包装所有元素?

java - 如何通过 dom4j 读取和打印 xml 中的外部(未解析的)通用实体声明

Android - 找不到 LinearLayout 的句柄

sql-server - 在 SQL Server 中验证 xml

java - JAX-RS 不适用于 Spring Boot 1.4.1

java - Android Views 的 WeakReference 安全吗?

java - JAXBContext.newInstance() 中的 NullPointerException

namespaces - 在 JAXB 编码时删除命名空间前缀

spring - 在 Spring 中使用 MOXy JAXB 生成 JSON 输出