【发布时间】:2015-06-20 14:57:26
【问题描述】:
我一直在使用 Spring Boot 和 Jackson-databind 2.5.2 将 Joda DateTime 从 java 序列化和反序列化到 json 并再次返回时遇到问题。我的 pom.xml 是这样的。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
当我序列化 DateTime 对象时,我得到一个表示 DateTime 的整数。实际上不是我所期望的,但很好。但是当我去保存我的对象时,我得到了以下错误......
Failed to convert property value of type 'java.lang.String' to required type 'org.joda.time.DateTime' for property 'endTime';
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type org.joda.time.DateTime for value '1428600998511'
出于某种原因,它会将其序列化为整数,然后将其反序列化,就好像它是一个字符串一样,但事实并非如此。我还尝试在调用其余服务之前设置 endTime = new Date(intValue) 并且尝试将像 'Tue Apr 28 2015 00:00:00 GMT-0700 (PDT)' 这样的字符串转换为 DateTime 也失败了。
我做错了什么?
更新:
这是我得到和的 JSON,我尝试立即回帖。
{
id: 4,
username: "",
name: "eau",
email: "aoue",
verbatimLocation: null,
latitude: null,
longitude: null,
startTime:null,
endTime: 1429034332312,
description: "ueoa",
media: [ ],
timeSubmitted: 1428600998000,
status: null,
submissionid: null
}
【问题讨论】:
-
你能发布一些相关的 JSON,进出吗?看起来将 JSON 发布回您的控制器的任何内容都将您的日期作为字符串发布。
-
也许您需要用
@JsonFormat注释该字段?例如@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd") -
好吧,这似乎成功了!谢谢!最后我只是回到存储我的日期,只要在 javascript 端,我使用的工具不能很好地处理我在 Java 端使用它们的相同格式的日期。这太令人沮丧了。
标签: jackson spring-boot jodatime