【问题标题】:how to resolve Joda date/time type `org.joda.time.DateTime` not supported by default如何解决默认不支持的 Joda 日期/时间类型`org.joda.time.DateTime`
【发布时间】:2021-04-15 14:59:56
【问题描述】:

我有一个现有的网络应用程序,不幸的是数据库中的“时间”字段没有转换为祖鲁时间。相反,我们使用org.joda.time.DateTime 作为我们的日期时间和时区封装器。

我正在从休眠 4.3.7.Final 更新到 5.3.20.Final
另外,我们让 hibernate 管理这些 DateTime 对象与数据库之间的转换,使用

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime lastUpdatedTimestamp; // <-- org.joda.time.DateTime

在休眠 5 上运行此程序会出现此错误:

10:22:11,463 ERROR [stderr] (default task-2) com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Joda date/time type `org.joda.time.DateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-joda" to enable handling (through reference chain: org.<company>.crs.model.PermissionEntity["lastUpdatedTimestamp"])

想知道为什么这会在更新到 5 之前在休眠 4 中工作? 我正在使用 joda-time 2.1 版,但能够在 2.9.7 中重现该问题

我也查看并找到了这个线程 Persist Joda-time's DateTime via Hibernate 但是,他们的解决方案是转换为 Joda 的 LocalDateTime,除非我弄错了,否则它不支持我的用例所需的时区。

编辑:我已经添加了请求的模块,但我仍然得到同样的错误。我已经使用 Joda 版本进行了测试:2.10.10、2.9.7 和 2.1

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-joda</artifactId>
    <version>2.12.3</version>
</dependency>

【问题讨论】:

  • 我相信'Joda 日期/时间类型org.joda.time.DateTime 默认不支持:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-joda”以启用处理'非常清楚。您希望我们提供什么帮助?
  • 我很困惑为什么它在 hibernate 4 中没有什么特别之处,但在 5 中没有?
  • 这个错误与Hibernate无关,是Jackson抛出的
  • 这可能只是我很愚蠢,但是,我将 Jackson 模块添加为 mvn 依赖项,但我仍然得到同样的错误。
  • 该依赖项提供了一个XxxModule 类。您需要通过调用objectMapper.registerModule(new XxxModule()) 来注册模块

标签: java hibernate


【解决方案1】:

您必须在 ObjectMapper 上注册 JodaModule,如下所示:

 import com.fasterxml.jackson.datatype.joda.JodaModule;

 ObjectMapper mapper = new ObjectMapper()
    .registerModule(new JodaModule())
    ...;

在 Jackson 2.12 之前,您不会收到您所看到的错误,因为如果 Jackson 遇到 Joda 对象,它将默认使用 BeanSerializer。以下是 2.12 中添加的代码,但现在会引发错误:

https://github.com/FasterXML/jackson-databind/blob/2.13/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java#L288

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 2021-08-24
    • 2022-10-18
    • 2019-11-12
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多