Jackson自定义反序列化器仅获取列表xml中的最后一个值

2024-04-24

我有以下 xml

<root>
<date>112004</date>
<entries>
    <entry id = 1>
        <status>Active</status>
        <person>
            <Name>John</Name>
            <Age>22</Age>
        </person>
    </entry>
    <entry id = 2>
        <status>Active</status>
        <person>
            <Name>Doe</Name>
            <Age>32</Age>
        </person>
    </entry>
    <entry id = 3>
        <status>N/A</status>
    </entry>
</entries>

我正在使用自定义杰克逊反序列化器来获取值,pojo 看起来像

@JacksonXmlRootElement(localName="root", namespace="namespace")

类根 { 私有字符串日期;

@JacksonXmlProperty(localName = "entries", namespace="tns")
private List<Entry> entries;
//getter and setter

}

class Entry {
 private String id;
 private String status;
 private Person person;
 //getter and setter
}

解串器代码看起来像

public class DeSerializer extends StdDeserializer<root>
{
 protected DeSerializer() {
    super(root.class);
  }
  @Override
public root deserialize(JsonParser p, DeserializationContext ctxt)  throws IOException, JsonProcessingException {
    JsonNode nodes = p.readValueAsTree();
    ObjectMapper mapper = new ObjectMapper();
    List<Entry> entry = mapper.convertValue(nodes.findValues("entry"), new TypeReference<List<Entry>>() {});
}
}

main()
{
XmlMapper x = new XmlMapper();
 final SimpleModule module = new SimpleModule("configModule",   com.fasterxml.jackson.core.Version.unknownVersion());
            module.addDeserializer(root.class, new DeSerializer());
            x.registerModule(module);
            root r = x.readValue(xmlSource, root.class); /*xmlsource is xml as string*/
}

问题是当我调试时,我总是从 xml 获取条目最后一个值。因此节点的值(在反序列化器中)是 {"date":"112004","entries":{"entry":{"id":"3","status":"N/A"}}} 和我不确定为什么它不被视为列表。我确实为 List 添加了 unwrapped = false 注释,但这没有成功。


它似乎readValueAsTree不支持获取整个集合。

我做了一些没有自定义的工作DeSerializer这有效。

@JacksonXmlRootElement(localName="root")
public class Root {
@JacksonXmlElementWrapper(useWrapping = true)
private List<Entry> entries;

private String date;

public List<Entry> getEntries() {
    return entries;
}

public void setEntries(List<Entry> entries) {
    if (this.entries == null){
        this.entries = new ArrayList<>(entries.size());
    }
    this.entries.addAll(entries);
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}
}

class Entry {
private String id;
private String status;
private Person person;
}

class Person {
@JacksonXmlProperty(localName = "Name")
private String name;

@JacksonXmlProperty(localName = "Age")
private String age;
}

然后进行单元测试:

    @Test
    void test_xml_XmlMapper() throws Exception {
    JacksonXmlModule xmlModule = new JacksonXmlModule();
    xmlModule.setDefaultUseWrapper(false);
    ObjectMapper xmlMapper = new XmlMapper(xmlModule);

    String xmlContent = "your xml file here"
    Root bean = xmlMapper.readValue(xmlContent, Root.class);
    assertThat(bean.getEntries().size(), Matchers.equalTo(3));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackson自定义反序列化器仅获取列表xml中的最后一个值 的相关文章

  • 包 javax.comm 不存在[重复]

    这个问题在这里已经有答案了 可能的重复 如何获取javax comm API https stackoverflow com questions 7562565 how to get javax comm api 我已经下载并安装了jdk1
  • OSGI - 处理捆绑包所需的第 3 方 JAR

    我刚刚开始 OSGI 开发 正在努力了解如何最好地处理依赖的 JAR 也就是说 如果我要创建一个捆绑包 我很可能需要使用一些第 3 方 JAR 当我创建要部署到 OSGI 的捆绑包 JAR 时 显然不包含这些第 3 方 JAR 因此该捆绑包
  • Java中如何做系统捷径跨平台集成?

    您可能知道 Mac OS X 中保存的快捷键是Cmd S在 Windows 上是Ctrl S 关闭应用程序的捷径是Cmd QWindows 是Alt F4 但问题是如何在 java 应用程序中执行这些操作 我是否需要找到我在应用程序中使用的
  • 无法在 Junit 测试中自动装配 JpaRepository - Spring boot 应用程序

    Hi All 我正在尝试在 Spring boot 应用程序中执行 Junit 测试 Junit 应该测试一些 CRUD 操作 我正在使用 Spring Repositories 特别是 JpaRepository 存储库类 package
  • java格式化表格输出

    所以我正在尝试格式化我的输出 System out println Menu nItem tItem t tPrice tQuantity for int i 0 i
  • C++ 中的模块路径到 Java JNI 调用

    当我用 C 创建 Java 8 JVM 时 我通常使用类似以下代码的内容来告诉 JVM 类路径 JavaVMOption options new JavaVMOption 1 JVM invocation options options 0
  • 如何解决 MongoWaitQueueFullException?

    我运行一个java程序 它是一个线程执行程序 它将数千个文档插入到mongodb中的表中 我收到以下错误 Exception in thread pool 1 thread 301 com mongodb MongoWaitQueueFul
  • Struts 2 动态变量

    我正在尝试使用 set 标签在 Struts2 中创建动态变量
  • 验证在子类上调用此方法时是否调用了重写的超类方法

    我将用这个例子来展示我的问题 我有一个带有方法的类foo 该类有一个重写此方法的子类 子类的方法调用超类的方法 我可以验证一下吗 我不想测试什么foo在超类中确实如此 我只需要验证它是否被调用 我知道重构可以有所帮助 优先考虑组合而不是继承
  • 在节点上生成 AES 密钥

    我正在处理一个使用自定义协议来加密通信的遗留应用程序 随机 AES 密钥在旧版 Java 应用程序中生成 如下所示 keygen KeyGenerator getInstance AES keygen init 128 keygen gen
  • 能够存储微秒的 Date 对象

    我正在寻找一个能够存储到微秒粒度的 Date 对象 有人知道吗 标准Date对象仅存储到毫秒 我知道这是平台限制 我可以通过包装来解决这个问题Date加上自定义类别中的小数数量 然而 我希望避免编写一个带有适当计算等的内容 我需要解析一个b
  • 为什么 getSession() 在短时间内间隔的后续请求中不返回相同的会话?

    我正在发送一个 getJSON HTTP GET 请求两次 使用不同的数据 一次又一次 假设我们有 request1 和 request2 我可以在 FF 和 Chrome 的开发者工具中看到我有相同的cookie JSESSIONID F
  • Struts 2 中的 Java 应用程序可以管理多少个会话?

    我正在开发事务管理应用程序 并且正在使用 Struts2 我在内部使用了一个会话来设置和获取值 例如 ActionContext getContext getSession put string string 在应用程序中使用这样的会话是否
  • 过滤(搜索和替换)InputStream 中的字节数组

    我有一个 InputStream 它将 html 文件作为输入参数 我必须从输入流中获取字节 我有一个字符串 XYZ 我想将此字符串转换为字节格式 并检查从 InputStream 获得的字节序列中是否存在与该字符串匹配的字符串 如果有的话
  • 如何正确使用 FirefoxOptions() 及其参数将其传递给 FirefoxDriver() 构造函数

    我在实例化 FirefoxDriver 时尝试使用 FirefoxOptions 如下所示 FirefoxOptions options new FirefoxOptions WebDriver localWebDriver new Fir
  • 如何在 jformattedtextfield 中仅添加双精度值

    我需要格式化 jformattedtextfield 以便在运行时仅添加具有两位小数的双精度 浮点值 例如 15600 00 请帮我解决这个问题 谢谢 以下是有关如何执行此操作的示例 NumberFormat format DecimalF
  • 如何解除阻塞在 ServerSocket.accept() 上的线程?

    我有一个带有以下代码的服务器线程 public void run try ServerSocket server EneaLog printLog Server is running server new ServerSocket this
  • 封闭实例的匿名类

    我正在阅读 Joshua Bloch 的 Effective Java 第二版 目前我在第 22 项 它描述了内部类和嵌套类 但我无法理解他这句话的意思 匿名类具有封闭实例当且仅当它们发生时 在非静态上下文中 有人能给我一个代码示例并解释它
  • Runtime.getRuntime().exec(),执行Java类

    我正在从我的应用程序内部执行 Java 类 proc Runtime getRuntime exec java Test 我怎样才能识别是否Test执行成功与否 即没有例外 重定向输出 错误 proc Runtime getRuntime
  • TextView 用字母打乱了我的话

    我的要求 创建 传入气泡 其宽度按内容排列 最大宽度为 90 我有这个标记

随机推荐

  • 如何将 .pb 文件转换为 .h5。 (张量流模型到keras)

    我已经使用重新训练了我的模型tensorflow现在想使用keras以避免会话内容 我怎样才能转换 pb文件至 h5 import tensorflow as tf from tensorflow keras models import s
  • 使用 IAM 角色承担的 Terraform

    我一直在使用 terraform 的访问 密钥来创建 管理我们在 AWS 中的基础设施 但是 我尝试改用 IAM 角色 我应该能够使用我的帐户中的角色并承担另一个帐户中的角色 并且应该能够运行计划 应用等以在另一个帐户中构建基础设施 有什么
  • Node.js 承诺请求返回

    我使用 promis 模块从请求模块返回 json 数据 但每次运行它时 它都会给我这个 Promise 45 0 81 0 65 null 54 null 我无法让它工作 有人知道问题所在吗 这是我的代码 function parse r
  • 无法上传 targetSdkVersion 为 30 的签名 apk

    我生成了一个签名的 apk 目标 sdk 版本为 30 Android 11 我知道它尚未正式发布 但我的应用程序已准备好接受新的更改 我正在尝试将其上传到 google play 控制台 但遇到错误 您上传的 APK 签名无效 了解更多信
  • 在开发中运行时,Google Chrome 中未设置 ASP.net core auth cookie

    我的解决方案中有三个应用程序 全部内置于 asp net core 1 MVC 6 中 应用程序 1 是一个 MVC 应用程序 用于验证用户身份 应用程序 2 是一个 Angular SPA 应用程序 是解决方案中的主要应用程序 App 3
  • 未找到指定的 VM 安装:类型标准 VM,名称 jre7

    未找到指定的 VM 安装 类型标准 VM 名称 jre7 您在 Eclipse 中构建 ant 文件时遇到过这个问题吗 那么这篇文章适合您 删除并重新创建工作区并不是解决方案 有一个简单的解决方案可以解决此问题 而无需重新创建工作区 右键单
  • 由于文件大小为零,无法连接到 NetBeans 发行版

    我最近在 Windows 10 PC 上重新安装了 Netbeans IDE 以恢复一些不相关的配置 当我尝试检查新插件以便能够下载 Sakila 示例数据库时 我收到这个错误 https i stack imgur com 1RqFL p
  • Lucene 3 上的“令牌”列表

    我是 Lucene 的新手 我开始学习版本 3 分支 但有一件事我不明白 显然是因为我在该主题上没有经验 在 Lucene 2 9 中 如果我想要一个令牌列表 我会创建一个 Token 类的 ArrayList 例如 ArrayList 这
  • 如何创建 pinterest 风格隐藏/取消隐藏导航/标签栏?

    如何创建隐藏 取消隐藏导航栏 就像 pinterest 和许多其他应用程序所做的那样 我知道基本的想法是使用 UIScrollView 委托并检测我是否向上或向下滚动并基于此显示导航栏 那么 如果导航栏隐藏 我是否还应该调整导航控制器视图高
  • 无法修改 char 数组

    考虑以下代码 char message foo void main void message bar 为什么 MPLAB IDE v8 63 中出现语法错误 我只是想改变字符数组的值 声明后不能像这样使用字符数组 如果您想为字符数组分配新值
  • 如何通过反射判断 C# 方法是否为 async/await?

    e g class Foo public async Task Bar await Task Delay 500 如果我们反思这个类和方法 我如何确定这是否是一个实际的 async await 方法 而不仅仅是一个恰好返回任务的方法 cla
  • 获得正确的图像旋转[重复]

    这个问题在这里已经有答案了 我有一个简单的问题 当我将图像加载到 Windows 窗体时PictureBox有些图片是旋转的 有些则不是 基本上 用户选择带有OpenFileDialog当选择图片时 private void OpenFD
  • 使用 JPA 实体作为域模型是一个好习惯吗?

    或者创建一个由域模型组成的域层并与 JPA 实体对话以进行数据库访问 两种方法的优缺点是什么 谢谢 这确实取决于您对域进行编码的方式 一般来说 在 Java 中 我更喜欢创建一组单独的 JPA 注释的 DTO 来处理持久性 此类 DTO 将
  • 尝试将应用程序二进制文件上传到 App Store Connect 时,Xcode 12 出现错误

    在 Mac OS 10 15 7 的 Xcode 12 1 中 当我尝试将应用程序二进制文件上传到 App Store Connect 时 我得到 App Store Connect 操作错误 请将 iTMSTransporter 更新为
  • Android 上的嵌套 Fragment 和 ViewPager 问题

    我将 FragmentStatePagerAdapter 与视图分页器结合使用 该视图分页器嵌套在 Android 上的片段中 因此 我将 ChildFragmentManager 与 FragmentStatePagerAdapter 结
  • 引用 Attach() 中新定义的变量

    我想对数据框的列进行许多修改 然而 由于需要大量的列和转换 我想避免一遍又一遍地使用数据框名称 在 SAS 数据步骤中 您可以在一个数据步骤内创建一个变量并在定义后立即引用它 data A set A varA varB gt 1 varC
  • 如何检测pyside2中Qwebengine内的按钮点击

    我在 pyside2 中编写了一个应用程序 它在 QWebEngine 中打开一个网页 该网页有 2 个按钮 我不明白如何检测 pyside2 应用程序模块中的按钮单击 我需要对该按钮单击执行其他操作 Example 下面是我的代码 fro
  • main:Object 的未定义方法“run”

    部署时我得到以下输出 cap aborted NoMethodError undefined method run for main Object config deploy rb 37 in block 2 levels in
  • 我在使用 FileSystemWatcher [vb.net] 时遇到问题

    这是我第一次使用 FileSystemWatcher 但它不起作用 在受监视的路径中创建文件时不会触发它 我的目标是监视程序文件目录中的更改 我会将复制的文件与在线列表 我下载的 进行比较 我还没有完成该部分 如果找到匹配项它将做什么 我究
  • Jackson自定义反序列化器仅获取列表xml中的最后一个值

    我有以下 xml