Spring mvc REST和mongoDB日期字段的问题

Posted

技术标签:

【中文标题】Spring mvc REST和mongoDB日期字段的问题【英文标题】:Issue with Spring mvc REST and mongoDB date field 【发布时间】:2016-08-06 16:11:08 【问题描述】:

我无法在 REST JSON 响应中返回存储在 mongodb 中的日期。我正在使用 Spring-MVC 4.2.5 @RestController 和 @ResponseBody。我将日期存储在 Mongodb 中为“createdDate”:ISODate(“2016-04-14T20:26:00.682Z”)。当我在 spring mvc 中将集合返回给控制器并将 JSON 数据返回给客户端时,整个 DateTime (JODA) 类被 json 化。我只需要 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
            

如何避免 jsonifying 整个 DateTime 类。

【问题讨论】:

你能检查一下答案吗?让我知道反馈 【参考方案1】:

您需要做一些事情来将日期格式化为 yyyy-MM-dd:

1.添加对com.fasterxml.jackson.datatype:jackson-datatype-joda的依赖。

2.通过将 spring.jackson.serialization.write-dates-as-timestamps: false 添加到您的 application.properties 文件中,配置 Jackson 不将日期格式化为时间戳

3.用@JsonFormat(pattern="yyyy-MM-dd")注解LocalDataTime字段或getter方法

这足以让 json 响应为yyyy-MM-dd。您可能会遇到时区问题。 有关详细信息,请按照以下说明操作: https://github.com/FasterXML/jackson-datatype-jsr310/issues/14

【讨论】:

谢谢@Json。但我通过编写自己的序列化程序解决了这个问题。 @JsonSerialize(using=JsonDateSerializer.class) public DateTime getCreatedDate() return createdDate; 当然,你也可以在这个过程中做到这一点。感谢您的回复。

以上是关于Spring mvc REST和mongoDB日期字段的问题的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc4使用及json 日期转换解决方案

两个 servlet 中的 Spring、MVC 和 REST

使用 spring security 和 mongodb 进行 Rest 身份验证

Spring MVC 和 Spring REST 的 Spring Security

Spring MVC、Rest 和 Shiro。 @RequiresAuthentication 不起作用

混合 Spring MVC + Spring Data Rest 会导致奇怪的 MVC 响应