SnakeYaml 中的多态集合

2024-01-04

我的目的是使用 jackson 拥有像 JSON 中的多态集合,也许可以借助标签。

我似乎无法正确配置它。

我的 yaml 文件是:

!person
age: 27
job: dev
name: me
skills:
- !devSkill {
  description: 'software development',
  name: android,
  language: java, c++
  years: 7
}
- !softSkill {
  description: 'good person',
  name: <3,
  reason: lots of NGO work
}
- !sportsSkill {
  description: 'racing legend',
  name: vrooom,
  championships: - San Marino 2012
                 - San Marino 2015
}

代码中的哪个将映射到一个具有(抽象?)带有描述和名称的 BaseSkill 的层次结构,以及 3 个子项:dev、soft 和 sports。

我的问题是,我对 SnakeYAML 的文档了解不够,无法允许这样做。我当前的选择是:

Constructor constructor = new Constructor(Person.class);
TypeDescription carDescription = new TypeDescription(Person.class);
                carDescription.putListPropertyType("skills", SportsSkill.class);
                carDescription.putListPropertyType("skills", SoftSkill.class);
                carDescription.putListPropertyType("skills", DevSkill.class);
                // Apparently the last is the winner here because it overrides
                constructor.addTypeDescription(carDescription);

Representer representer = new Representer();
                representer.addClassTag(Person.class, new Tag("!person"));
                representer.addClassTag(SoftSkill.class, new Tag("!Softkill"));
                representer.addClassTag(DevSkill.class, new Tag("!devSkill"));
                representer.addClassTag(SportsSkill.class, new Tag("!portsSkill"));

DumperOptions options = new DumperOptions();
                options.setPrettyFlow(true);
Yaml yaml = new Yaml(constructor, representer, options);

错误在于

E/YAML﹕ Can't construct a java object for tag:yaml.org,2002:app.yamlmodel.Person; exception=Cannot create property=skills for JavaBean=Person(name=me, job=dev, age=27, skills=null); null; Can't construct a java object for !sportSkill; exception=Invalid tag: !sportSkill
    in "<reader>", line 1, column 1:
    name: me
    ^

该线程已过时,但我找到了解决方案,希望它仍然可以帮助某人。 你的错误是你应该将标签和类型描述符添加到构造函数中,并让 SnakeYaml 找出对象结构。 在你的情况下:

Constructor constructor = new Constructor(Person.class);
constructor.addTypeDescription(new TypeDescription(SoftSkill.class, new Tag("!softkill"));
constructor.addTypeDescription(new TypeDescription(DevSkill.class, new Tag("!devkill"));
constructor.addTypeDescription(new TypeDescription(SportsSkill.class, new Tag("!sportskill"));

你没有提到你使用的 SnakeYaml 版本,但我使用的是 1.16

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SnakeYaml 中的多态集合 的相关文章

  • 在Maven中生成Version.java文件

    我有一个使用 Ant 脚本构建的 Java 项目 我正在尝试将项目转换为 Maven 其中一项任务生成一个名为 Version java 的 Java 源文件 其中包含编译时间戳的静态字符串表示形式 如下所示 package com foo
  • Java将字符串解析为double

    如何解析字符串中的这个 Double 00034800 变成 Double 值 最后两位数字实际上是小数点 所以我正在寻找的结果是348 00 是否有这样的格式可以与十进制格式一起使用 Well String s 00034800 doub
  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 为什么在将 String 与 null 进行比较时会出现 NullPointerException?

    我的代码在以下行中出现空指针异常 if stringVariable equals null 在此语句之前 我声明了 stringVariable 并将其设置为数据库字段 在这个声明中 我试图检测该字段是否有null值 但不幸的是它坏了 有
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • 为什么解析这个 JSON 会抛出错误?

    我正在尝试解析这个 JSONObject query yahoo count 1 results rate Name USD INR id USDINR Time 12 19pm Date 10 31 2015 Bid 65 405 Ask
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样

随机推荐

  • GAE self.request.cookies 返回一个空字典

    我正在尝试覆盖CheckIsAdmin方法存在于ApiCallHandler班级 所以我跟着this https stackoverflow com a 33652077 3297613回答 但我在打印时总是得到空字典self reques
  • Swift 中的自定义类集群

    这是一个比较常见的设计模式 https stackoverflow com a 17015041 743957 https stackoverflow com a 17015041 743957 它允许您从您的返回子类init calls
  • 从特定于语言环境的字符串获取 NSDecimalNumber?

    我有一些特定于区域设置的字符串 例如 0 01 或 0 01 我想将此字符串转换为 NSDecimalNumber 来自到目前为止我在互联网上看到的例子 http developer apple com documentation Coco
  • WP8.1 InvokeScript 错误

    我正在开发 Windows Phone 8 1 应用程序 我对 WebBrowser 类的 InvokeScript 方法有疑问 我的 XAML 中有这个 当我运行这段代码时 myWebBrowser Loaded object sende
  • 从 ServletContext 资源解析 XML 文档 [/WEB-INF/applicationContext.xml];

    我在控制台中遇到一些错误 我将在下面发布 我正在使用 eclipse 并清理了项目 刷新了目标 清理了 tomcat 服务器 因此追逐或任何此类性质的事情都不是问题 控制台错误 SEVERE Context initialization f
  • 从 C# 获取 Windows 应用程序的位置

    我需要一些帮助来尝试获取记事本窗口的位置 我很确定我需要使用GetWindowRect功能如下 但我不知道如何使用它 我已将以下内容放入 win 表单项目中 但是myRect X myRect Y等里面没有任何东西 我认为他们至少应该有我正
  • webrtc:mediaDevices.enumerateDevices() 返回空 deviceId

    我目前正在探索 webRTC 我想做的是获取所有媒体设备信息以及deviceId using navigator mediaDevices enumerateDevices 然后根据其种类属性将其分离出来 并允许用户选择针对特定种类使用哪种
  • Python -- 正则表达式 -- 如何在两组字符串之间查找字符串

    考虑以下 div a href foo1 com Foo1 a div a href Home a div div a href extract Extract a div div a href sitemap Sitemap a div
  • Array.prototype.sort(compareFn) 在浏览器中的工作方式不同?

    我一直在测试作为回调给出的比较函数Array prototype sort compareFn 当compareFn返回value 0时 但我在Chrome中得到了意外的行为 Chrome 1 2 3 4 5 6 7 8 9 10 sort
  • 如何将后备样式属性应用到 React JS 组件?

    我想将后备样式属性应用于组件 例如 var inlineStyle display webkit box display webkit flex display moz box display moz flex display ms fle
  • 如何使用jenkins删除目录中的文件

    在我的系统中 我每天都会在 1 个文件夹中下载新版本 然后将其用于进一步的原因 但在运行 jenkins 作业后 我想删除该文件夹 不是工作区 中的文件 这将从同一目录中删除特定文件夹 这将帮助我每次根据同一台机器上运行的不同詹金斯作业下载
  • Swift:格式化字符串宽度

    我想做的事情在 C C Java 和许多其他语言中非常简单 我想要做的就是能够指定字符串的宽度 类似于 printf 15s var 这将创建 15 个字符的字段宽度 我已经做了很多谷歌搜索 我尝试过使用COpaquepointer也Str
  • 如何在 HTTP 请求中使用 urllib2 发送自定义标头?

    我想在使用 urllib2 urlopen 时在请求中发送自定义 Accept 标头 我怎么做 不完全的 创建一个Request对象实际上并不发送请求 并且 Request 对象没有Read 方法 还 read 是小写 您所需要做的就是通过
  • Strace 检测到对 brk 的调用,但 GDB 不会在断点处停止

    我已经尝试调试内存泄漏相当长一段时间了 我的主要问题是无法使用像 Valgrind 之类的正确工具 所以我选择了普通的 GDB strace 我的程序是一个循环 在每次迭代中 它都会创建一些对象 然后调用它们的析构函数 正如它所解释的her
  • 检测 Android 手机上的 5G 连接

    我正在尝试确定蜂窝连接的类型 我使用了不同的方法 例如建议的方法here https stackoverflow com a 55975119 987753 但结果是 我在配备 Android 10 和 5G 连接的三星设备上不断获得 4G
  • 在 EditText 小部件中显示默认日期

    如何在运行时动态显示 EditText 小部件文本中的当前日期 谢谢 帕特里克 如果您的 EditText 在 xml 文件中声明 则必须在代码中检索它 如下所示 EditText editText EditText findViewByI
  • 创建将在 Outlook 中打开的 mailto 超链接,并在正文中显示超链接

    这是我的场景 我正在尝试在使用 mailto 超链接生成的电子邮件正文中嵌入一个超链接 所以我会有这样的东西 a href Click Here to open Outlook and with generated email a 问题是
  • 确定按下哪个键

    javascript中如何判断按下的是哪个键 在接受关键事件的函数中 function e var key String fromCharCode e keyCode
  • 使 { 和 } 忽略仅包含空格的行

    当您使用 和 在 vi m 中按段落导航时 它会跳过只包含空格的行 尽管它们在其他情况下是 空白 我如何说服 vim 将 仅空白 行视为段落分隔符 以便 和 跳转到它们 这是正确处理计数的修改版本 function ParagraphMov
  • SnakeYaml 中的多态集合

    我的目的是使用 jackson 拥有像 JSON 中的多态集合 也许可以借助标签 我似乎无法正确配置它 我的 yaml 文件是 person age 27 job dev name me skills devSkill descriptio