【问题标题】:How do I avoid content fields in Joda objects?如何避免 Joda 对象中的内容字段?
【发布时间】:2017-01-03 12:14:07
【问题描述】:

我在文档中使用 Joda 对象(DateTime 和 DateTimeZone),每当我通过 REST 接口访问它时,我都会获得带有此类字段的条目

lastAggregationDate: { content: "2016-07-12T17:58:43.643Z" }

而不是

lastAggregationDate: "2016-07-12T17:58:43.643Z"

我已经声明了 Joda Jackson 依赖项,并且我看到了这些类型的反序列化器,所以我对这里的工作感到困惑。

我在 slightly modified Spring sample project 中复制了这种行为,但使用的是 Java 的本机日期类型,而不是 Joda 的。我向 Person 对象添加了出生日期属性,并修改了 shouldRetrieveEntity 测试以查找 $.dateOfBirth.content。我已经确认正在使用序列化程序,并且似乎 LocalDate 对象被视为资源而不是简单属性。

【问题讨论】:

  • 同样的问题请参见stackoverflow.com/q/39170405/466738
  • 谢谢,亚当。 Marc 在记录问题方面做得很好,他的帖子很有帮助,因为他指出升级到 1.4.0 是导致问题的原因。我怀疑相同,并将使用 1.4.0 之前的依赖项添加一个分支到我的示例中以确认。
  • 我添加了带有修改后测试代码的branch,以证明在 1.4.0 之前不存在“内容”。
  • 我创建了一个ticket for this issue。如果它对您有影响,请投赞成票。

标签: java jodatime spring-data-rest spring-hateoas jackson-modules


【解决方案1】:

这在 Spring Data Hopper-SR4 中已修复: https://jira.spring.io/browse/DATAMONGO-1498

【讨论】:

    【解决方案2】:

    这个问题是由于 Spring Boot 没有正确设置 MongoMappingContext 造成的。已经为 Spring Boot 创建了一个票证,预计 1.4.1 版本的修复程序(此答案归功于 Oyku Gencay 和 Oliver Gierke)。有关详细信息,请参阅 ticketpull request

    【讨论】:

    • 我刚刚将我的依赖项更新到 Sprint Boot 1.4.1。拉取请求添加的测试使用 java.time.LocalDateTime 检查结果。使用 joda time 对象描述的问题仍然存在。
    • 忘记我之前的评论:升级到 Spring Boot 1.4.1 确实 解决了本文中描述的问题,但如果您使用 @EnableMongoAudit 注释主应用程序类,它再次中断序列化。
    • 我在我的项目中看到了同样的情况(与上面提到的示例相反)。正如 Spring 票证中所述,我最终在过渡期间使用了 @JsonUnwrapped
    • Spring Boot 1.4.2 绝对解决了这个问题,无论应用程序是否使用 @EnableMongoAudit 注释。
    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多