当前位置: 首页 > 知识库问答 >
问题:

具有ZonedDateTime字段的对象的Spring boot camel unmarshal json列表

伊俊能
2023-03-14

我有两条不同的骆驼路线。

1)

from(...).routeId(...)
  .unmarshal().json(SomeClass.class)
  ....;

和2)

from(...).routeId(...)
  .unmarshal(new ListJacksonDataFormat(SomeOtherClass.class))
  ....;

SomeClass和SomeOtherClass都有一个名为timestamp的字段,其类型为java.time.ZonedDateTime。

在第一条路线中,我传递单个对象,它解组没有错误。在第二条路线中,我传递一个对象列表,但它不起作用:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 日期/时间类型 java.time.ZonedDateTime 默认不支持:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-jsr310”以启用处理

问题:

    < li >如果我想解组列表,我需要使用< code >,我这样理解对吗?解组(新的ListJacksonDataFormat(...))而不是< code >。解组()。json(...)? < li >我真的需要添加模块" com . faster XML . Jackson . datatype:Jackson-datatype-JSR 310吗?否则,我甚至不会在这里询问就添加它,但是因为我的第一个路由可以很好地管理ZonedDateTime,所以我想确定我真的必须添加一个新的模块,或者是否有任何其他方法来处理它?很奇怪,第一个路由器可以很好地解组ZonedDateTime,而第二个却不能。

.unmarshal(…)之后,我计划调用.bean(…,“method”),其中方法以List为参数。不确定是否需要此额外信息,但添加了它以防万一。

共有1个答案

毕瀚
2023-03-14

您的第一个选项使用 xstream 库来解组 json。有关 json 方法,请参阅 javadoc。

你的第二个选择是利用Jackson

显然,您有正确的依赖项来允许xstream散集java.time.ZonedDateTime对象,但您没有正确的依赖项来使用jackson这样做。

您可能想做一些研究,并选择您想用于json解析的库,并在整个项目中坚持使用一个库

 类似资料:
  • 我的DB返回给我一个重复的java对象列表,其中只有一个属性不同,即course。例如,针对1个学生:针对2个不同课程的2个学生对象。我创建了一个模型类,我想在其中填充来自DB的student对象。对于model class中的课程,我已经创建了字符串列表。

  • 问题内容: 我有5个字段的对象: 要排序的的我写了下面。 这是在具有多个要比较的对象的对象上实现的正确方法吗? 问题答案: 您的方法可能是正确的,但是效率低下(不必要地调用equals)并且难以阅读。可以这样重写: 更好的方法是使用库方法将所有这些逻辑抽象掉,这样您就不必考虑它了。例如使用apache.commons.lang CompareToBuilder

  • 如果我试图反序列化一个JSON字符串,该字符串缺少object类中的一个字段,那么在创建对象时,该字段将被设置为null。当发生这种情况时,我需要Jackson抛出一个异常,这样我就不必在每个对象中实现方法;即JSON字符串输入必须定义了类中的所有字段,或者抛出。 考虑到我的配置,这是可能的吗?

  • 我想从一个对象中获得一个具有公共超级类的字段列表,然后迭代它们并执行超级类中存在的方法。示例: 所以从BasePage类,我想实现检查方法,它应该解析一个页面的字段列表,然后得到具有超级类basElement的字段列表,然后为每个启动方法存在。我确认它不是反射私人领域的复制品

  • 首先,让我提前感谢你所有的帮助! 让我解释一下我目前的问题: 我试图用rest/json/swagger层包装一些遗留web服务调用。事实上,这些旧服务使用了一种棘手的专有xml格式,如下所示: 我能够序列化大多数对象和字段,但根标记有问题。用于序列化的主要类如下所示,但我需要根标记从“serviceId”属性中获取其值 为了实现这种复杂的自定义序列化,我在jackson XmlMapper fo