Spring mvc REST 和 mongoDB 日期字段的问题
Issue with Spring mvc REST and mongoDB date field
我在 REST JSON 响应中 returning 存储在 mongodb 中的日期时遇到问题。我正在使用 Spring-MVC 4.2.5 @RestController 和 @ResponseBody。我将 Mongodb 中的日期存储为 "createdDate" :ISODate("2016-04-14T20:26:00.682Z")。当我 return 将集合返回到 spring mvc 中的控制器并且 return 将 JSON 数据返回到客户端时,整个 DateTime (JODA) class 是jsonified。我只需要 DD-MM-YYYY 格式的日期,不需要所有其他属性。我不想将日期作为字符串存储在 monngoDB 中。
这是我设置日期的方式:
DateTime date = new DateTime(DateTimeZone.forID("Asia/Kolkata"));
booking.setCreatedDate(date);
这是 MongoDB 中的样子。
"createdDate" : ISODate("2016-04-14T20:26:00.682Z")
这就是我创建响应的方式:
Object resp;
booking = getFromMongo(id);
resp.setBooking(booking)
return resp;
下面是我的 JSON 回复
"createdDate": {
"year": 2016
"minuteOfHour": 56
"weekyear": 2016
"yearOfEra": 2016
"hourOfDay": 1
"era": 1
"dayOfMonth": 15
"dayOfWeek": 5
"dayOfYear": 106
"secondOfMinute": 0
"millisOfSecond": 764
"weekOfWeekyear": 15
"yearOfCentury": 16
"monthOfYear": 4
"centuryOfEra": 20
"secondOfDay": 6960
"minuteOfDay": 116
"millisOfDay": 6960764
"zone": {
"uncachedZone": {
"cachable": true
"fixed": false
"id": "Asia/Kolkata"
}-
"fixed": false
"id": "Asia/Kolkata"
}-
"millis": 1460665560764
"chronology": {
"zone": {
"uncachedZone": {
"cachable": true
"fixed": false
"id": "Asia/Kolkata"
}-
"fixed": false
"id": "Asia/Kolkata"
}-
}-
"equalNow": false
"beforeNow": true
"afterNow": false
}
如何避免对整个 DateTime 进行 jsonifying class。
您需要做一些事情才能将日期格式化为 yyyy-MM-dd:
1.Add 对 com.fasterxml.jackson.datatype:jackson-datatype-joda
的依赖。
2.Configure Jackson 不通过将 spring.jackson.serialization.write-dates-as-timestamps: false
添加到您的 application.properties
文件来将日期格式化为时间戳。
3.Annotate LocalDataTime 字段或 getter 方法与 @JsonFormat(pattern="yyyy-MM-dd")
这足以使 json 响应为 yyyy-MM-dd
。您可能会遇到时区问题。
有关详细信息,请执行以下操作:
https://github.com/FasterXML/jackson-datatype-jsr310/issues/14
我在 REST JSON 响应中 returning 存储在 mongodb 中的日期时遇到问题。我正在使用 Spring-MVC 4.2.5 @RestController 和 @ResponseBody。我将 Mongodb 中的日期存储为 "createdDate" :ISODate("2016-04-14T20:26:00.682Z")。当我 return 将集合返回到 spring mvc 中的控制器并且 return 将 JSON 数据返回到客户端时,整个 DateTime (JODA) class 是jsonified。我只需要 DD-MM-YYYY 格式的日期,不需要所有其他属性。我不想将日期作为字符串存储在 monngoDB 中。
这是我设置日期的方式:
DateTime date = new DateTime(DateTimeZone.forID("Asia/Kolkata"));
booking.setCreatedDate(date);
这是 MongoDB 中的样子。
"createdDate" : ISODate("2016-04-14T20:26:00.682Z")
这就是我创建响应的方式:
Object resp;
booking = getFromMongo(id);
resp.setBooking(booking)
return resp;
下面是我的 JSON 回复
"createdDate": {
"year": 2016
"minuteOfHour": 56
"weekyear": 2016
"yearOfEra": 2016
"hourOfDay": 1
"era": 1
"dayOfMonth": 15
"dayOfWeek": 5
"dayOfYear": 106
"secondOfMinute": 0
"millisOfSecond": 764
"weekOfWeekyear": 15
"yearOfCentury": 16
"monthOfYear": 4
"centuryOfEra": 20
"secondOfDay": 6960
"minuteOfDay": 116
"millisOfDay": 6960764
"zone": {
"uncachedZone": {
"cachable": true
"fixed": false
"id": "Asia/Kolkata"
}-
"fixed": false
"id": "Asia/Kolkata"
}-
"millis": 1460665560764
"chronology": {
"zone": {
"uncachedZone": {
"cachable": true
"fixed": false
"id": "Asia/Kolkata"
}-
"fixed": false
"id": "Asia/Kolkata"
}-
}-
"equalNow": false
"beforeNow": true
"afterNow": false
}
如何避免对整个 DateTime 进行 jsonifying class。
您需要做一些事情才能将日期格式化为 yyyy-MM-dd:
1.Add 对 com.fasterxml.jackson.datatype:jackson-datatype-joda
的依赖。
2.Configure Jackson 不通过将 spring.jackson.serialization.write-dates-as-timestamps: false
添加到您的 application.properties
文件来将日期格式化为时间戳。
3.Annotate LocalDataTime 字段或 getter 方法与 @JsonFormat(pattern="yyyy-MM-dd")
这足以使 json 响应为 yyyy-MM-dd
。您可能会遇到时区问题。
有关详细信息,请执行以下操作:
https://github.com/FasterXML/jackson-datatype-jsr310/issues/14