序列化为 XML 时忽略父类

2023-11-29

当子类列表上有 @XmlElement 时,是否有 JAXB 注释可以忽略父类?

只是为了澄清 - 我想知道是否有更好的方法,而不是将所有父类 getter/setter 标记为瞬态,然后必须返回子类并添加 getter/setter 并将它们注释为 XmlElements

一个例子:

public class GenericHelper {
    String name="";
    String dates="";
    String roleName="";
    String loe="";
    @XmlTransient
    public String getName() {return name;}
public void setName(String name) {this.name = name;}
@XmlTransient
public String getDates() {return dates;}
public void setDates(String dates) {this.dates = dates;}
@XmlTransient
public String getRoleName() {return roleName;}
public void setRoleName(String roleName) {this.roleName = roleName;}
@XmlTransient
public String getLOE() {return loe;}
public void setLOE(String loe) {
    this.loe = loe.replace("%", "").trim();
}
}

and

public class SpecificHelper extends GenericHelper {
List<ProjectHelper> projects;
public SpecificHelper (){
    projects=new ArrayList<ProjectHelper>();
}
@XmlElement(name = "project")
@XmlElementWrapper (name = "projectlist")
public List<ProjectHelper> getProjects() {return projects;}
public void setProjects(List<ProjectHelper> projects) {this.projects = projects;}
@XmlElement
public String getName(){
    return super.getName();
}

@Override
public String toString(){
    String ret="SpecificHelper [";
    ret+="name:"+name+";";
    ret+="dates:"+dates+";";
    ret+="roleName:"+roleName+";";
    ret+="loe:"+loe+";";
    ret+="\n\tprojects:"+projects+";";
    return ret+"]";
}
}

因此,在这个示例中,如果我取出 GenericHelper 中的 XmlTransient 注释以及扩展它的任何类,如果我有一个方法 getSpecificHelper() 返回所有雇主的列表,并使用 XmlElement 对其进行注释,那么所有这些项目都将返回名称、LOE、RoleName 等。我正在寻找一个用于 GenericHelper 的类注释,这样我就可以避免必须单独使用所有 @XmlTransients,并且仅使用我在 SpecificHelper 中放入的 XmlElement 表示法


怎么样?

家长班

我们将使用 XmlAccessType.NONE 告诉 JAXB 仅映射显式注释的字段/属性。

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.NONE)
public class Parent {

    private String parentProperty1;
    private String parentProperty2;

    public String getParentProperty1() {
        return parentProperty1;
    }

    public void setParentProperty1(String parentProperty1) {
        this.parentProperty1 = parentProperty1;
    }

    public String getParentProperty2() {
        return parentProperty2;
    }

    public void setParentProperty2(String parentProperty2) {
        this.parentProperty2 = parentProperty2;
    }

}

儿童班

我们将在子项上使用 XmlAccessType.PROPERTY。我们想要包含的父类的任何属性都需要被覆盖并显式注释。在此示例中,我们将从 Parent 类引入parentProperty2。您只需要重写父类的 getter 方法。

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Child extends Parent {

    private String childProperty;

    @Override
    @XmlElement
    public String getParentProperty2() {
        return super.getParentProperty2();
    }

    public String getChildProperty() {
        return childProperty;
    }

    public void setChildProperty(String childProperty) {
        this.childProperty = childProperty;
    }

}

示范课

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Child.class);

        Child child = new Child();
        child.setParentProperty1("parentProperty1");
        child.setParentProperty2("parentProperty2");
        child.setChildProperty("childProperty");

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(child, System.out);
    }
}

Output

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<child>
    <childProperty>childProperty</childProperty>
    <parentProperty2>parentProperty2</parentProperty2>
</child>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列化为 XML 时忽略父类 的相关文章

  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 使用 .htaccess 和 mod_rewrite 强制使用 SSL/https

    如何使用 PHP 中特定的 htaccess 和 mod rewrite 页面强制使用 SSL https 对于 Apache 您可以使用mod ssl强制使用 SSLSSLRequireSSL Directive 除非为当前连接启用了基于
  • 使用未分配的局部变量?

    Visual Studio 一直说Use of unassigned variable for iVal and iNumber 谁能告诉我哪里错了 这是一段代码 要求用户不断输入整数并将它们相加 直到用户想要停止为止 然后整数的总和显示在
  • 如何在使用 UI 生成器创建的渲染器中添加动态数据?

    如何在使用 UI 生成器创建的渲染器中添加动态数据 从 ui 构建器创建渲染并使用动态数据填充列表 protected boolean initListModelList List cmp cmp setModel new com code
  • itext - 添加无边框的 png 图像

    我想将以下 png 图像添加到我的 pdf 中 我使用以下代码来做到这一点 Image img PngImage getImage filename img setBorder Image NO BORDER img setAlignmen
  • Python3.5 和 FF48 的 Selenium WebDriver 出现“无法加载配置文件”错误

    我正在尝试将 Selenium 与 Python 一起使用 因此 我编写了以下代码并保存为名为的文件test py在工作目录中 用户 ykt68 seleniumwork ykt68 macbp15 seleniumwork pwd Use
  • Flutter for Linux 构建失败

    任何启用了 Linux 的 Flutter 应用程序的 Linux 构建都会导致以下错误 flutter run d linux Launching lib main dart on Linux in debug mode snap flu
  • 在 Windows 上安装 Tensorflow 错误

    Tensorflow 现已在 Windows 上可用 https developers googleblog com 2016 11 tensorflow 0 12 adds support for windows html 我使用pip安
  • 在oracle SP中用更大的数据类型替换varchar2

    我使用的是oracle版本10 PL SQL 中有使用 varchar2 变量的存储过程 该代码不断附加 varchar2 变量 当 varchar2 变量大小超过 32767 时 它无法附加任何更多值 现在我想将数据类型更改为long或c
  • 通过字符串过滤 json 数组 php

    我有一个 JSON 数组 使用json decode 设置数据 我正在寻找匹配数组中的某个项目 如果它匹配 我需要返回数组的整个 行 而不仅仅是像我找到的所有 filter array 片段那样的单个字段 有人能指出我正确的方向吗 调用前数
  • 使用 HttpURLConnection 进行 NTLM 身份验证

    有没有办法实现 NTLM 身份验证HttpURLConnection 目前我已经实现了它DefaultHttpClient and JCIFSEngine对于认证方案 我的灵感是 Android NTLM 身份验证 ksoap 和持久连接
  • sysinfo 系统调用未返回正确的 freeram 值

    我最近使用 sysinfo 系统调用编写了以下 C 代码来显示系统统计信息 有趣的是 sysinfo 结构的 freeram 变量不返回可用 RAM 的数量 而是返回当前 RAM 使用情况 我必须使用一种解决方法 通过从总内存中减去自由内存
  • 如何在本地备份本地 Docker 注册表的镜像?

    如何创建一个本地注册表容器从主机安装卷并在本地保留所有提取的映像 具有持久镜像的本地 Docker 注册表 应该可以有一个临时注册表容器 及其 docker 卷 从而允许不要多次下载图像 即使在注册表 或整个 Docker VM 被丢弃并重
  • 需要从HTML页面解析图像src然后显示它

    我目前正在尝试开发一个应用程序 它可以访问以下网站 http lulpix com 并解析 HTML 并从以下部分获取 img src div class pic rounded 8 div style margin 0 0 36px 0
  • 定义宏以将案例类实例转换为映射并返回时出现编译错误

    我试图理解以下博客文章 其中讨论了如何使用宏创建基于宏的通用方法来将案例类对象与地图相互转换 http blog echo sh post 65955606729 exploring scala macros map to case cla
  • Twisted:如何识别初始连接上的协议,然后委托给适当的协议实现?

    我正在编写一个 Python 程序 它将使用 Twisted 连接到 TCP 服务器 套接字另一端的服务器可能正在运行两种可能的协议 protoA 或 protoB 之一 但我不知道它是哪一种 直到我启动连接并 询问 服务器正在使用哪种协议
  • Angular Bootstrap 模态打开加载

    我在用http angular ui github io bootstrap modal 现在我想在页面加载时打开模态 Angular http angular ui github io bootstrap 有一个指令和 modal 服务
  • 强制浏览器使用Javascript window.open 下载图像?

    有没有办法让图像在单击后立即下载 无需右键单击将图像另存为 我正在使用一个小的 Javascript 函数来调用下载页面 a href Click to download a 在 download php 页面中我有类似的内容 file G
  • 我的 CipherOutputStream 无提示地失败

    我正在尝试使用公钥加密 Java 中的一些二进制数据 如这个有用的页面上所述 http www junkheap net content public key encryption java 按照页面的指示 我使用以下命令创建了公钥和私钥
  • 打开重复 div 的图像预览

    我有一个上传图像并向该图像添加预览的功能 我有两个按钮 当我单击第一个按钮时 它会单击输入类型文件并打开它 第二个按钮会复制 div 如何才能我复制这个 div 并更改它的 id 或类 复制后 我怎样才能使按钮适用于新复制的 div 而不是
  • 序列化为 XML 时忽略父类

    当子类列表上有 XmlElement 时 是否有 JAXB 注释可以忽略父类 只是为了澄清 我想知道是否有更好的方法 而不是将所有父类 getter setter 标记为瞬态 然后必须返回子类并添加 getter setter 并将它们注释