Spring Data REST MongoDB:REST中的Joda DateTime表示

时间:2016-09-25 17:18:39

标签: spring rest spring-data spring-data-mongodb spring-data-rest

My Spring Data MongoDB实体具有Joda DateTime类型的属性:

@JsonProperty("myDate")
private DateTime myDate;

使用Spring Boot 1.3.6,Spring Data 1.8.4,Spring Data REST 2.4.4,此属性将呈现为

"myDate": "2016-09-25T15:58:37.486Z"

在我的Spring Data实体的REST表示中。

在我将项目依赖项更新到Spring Boot 1.4.1,Spring Data MongoDB 1.9.3,Spring Data REST 2.5.3之后,我突然将我的日期字段表示为

"myDate": {
    "content": "2016-09-25T15:58:37.486Z"
},

看起来Joda的DateTime开始被再次视为数据实体: https://jira.spring.io/browse/DATAMONGO-624

现在我想知道如何在不降级到Spring Boot版本的情况下回到REST中的Spring Boot 1.3.6 DateTime表示。

修改

将Jackson2 @JsonUnwrapped注释添加到属性有助于获得表示:

@JsonProperty("myDate")
@JsonUnwrapped
private DateTime myDate;

这对我来说是次优解决方案,因为我的属性是从JSON模式自动生成的,而且我对生成的注释的控制有限。

编辑2:

Javadoc for the CustomConversions类说明了

  

这些类型将被视为简单类型(这意味着它们都不是   需要更深入的检查或嵌套转换。就这样   CustomConversions也充当SimpleTypeHolder的工厂

对于Spring Data REST [实际上]不是这样,从我可以告诉调试我的代码。 在渲染JSON时,通过默认CustomConversions添加的类型不会被视为简单类型,并且这些类型的属性会被序列化为嵌入式实体对象。

这是Spring Data REST PersistentEntityJackson2Module中调用Spring Data MongoDB PersistentEntity实现以检查属性类型是否简单的位置。由于Spring Data Commons AbstractMappingContext中的simpleTypeHolder不包含Spring Boot自动配置添加Joda DateTime转换器的类型,因此DateTime字段被视为复杂对象。

编辑3:

在JIRA中跟踪此问题: https://jira.spring.io/browse/DATAREST-907

0 个答案:

没有答案