【问题标题】:Declaring date from MongoDB as correct Type将 MongoDB 中的日期声明为正确的类型
【发布时间】:2017-09-26 11:35:37
【问题描述】:

我正在尝试将 case 类 匹配到 mongoDb (0.12) 但是一个字段是日期,我想出了这个 运行时错误 em>:

[JsResultException: JsResultException(errors:List((/date,List(JsonValidationError(List(error.expected.date),WrappedArray())))))]

我的 MongoDB 集合中的文档如下所示:

   { "_id": ObjectID("59c33152ca2abb344c575152"), "date": ISODate("2017-09-26T00:00:00Z"), "population": 1200 }

而我的案例类是:

   case class MyClass(_id: Option[BSONObjectID] = None, date: Date = new Date, population: Int = 0)

我尝试了各种组合。任何人都可以看到问题可能是什么?在此之后,我打算将其转换为 String 并将其输出到屏幕上。谢谢


只是补充一点,我也有这个伴侣对象

   object MyClass {
     implicit val myClassFormat = Json.format[MyClass]
   }

【问题讨论】:

    标签: mongodb playframework reactivemongo


    【解决方案1】:

    您可能必须为 Date 类型描述正确的 Json Format,例如这个(使用 org.joda.time.DateTime):

    import org.joda.time.{DateTime, DateTimeZone}
    import play.api.libs.json._
    
    object myClass {
        val ISO8601 = "yyyy-MM-dd'T'HH:mm:ssZZ"
        implicit val dateFormat: Format[DateTime] = Format[DateTime](Reads.jodaDateReads(ISO8601), Writes.jodaDateWrites(ISO8601))
    }
    

    【讨论】:

    • 谢谢,但是您的某些代码在 scala 2.12 中似乎已被弃用。我还编辑了问题以显示正在格式化 case 类companion object - 不确定是否需要在此处为​​ 完成任何特定操作日期.
    • 在我看来,您必须在 Format[MyClass] 之前声明一个隐含的 Format[Date],您是否已经尝试过?
    • 我正在使用 Play 中的自动映射 [playframework.com/documentation/2.6.x/ScalaJsonAutomated] 所以我认为这将确保所有字段的格式正确。我确实按照您的建议尝试过,但它没有引用类字段:implicit val weatherDateFormat = Json.format[Date]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多