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