2016-11-28 8 views
0

Я работаю над проектом, используя Play, Scala, MongoDB. Я хочу хранить List[Datetime] в коллекции, поэтому для этого мне нужны fomatters. Для хранения Datetime я использовал этот форматировщикformatters для List [DateTime] play scala

implicit def dateFormat = { 
    val dateStandardFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS" 

    val dateReads: Reads[DateTime] = Reads[DateTime](js => 
    js.validate[JsObject].map(_.value.toSeq).flatMap { 
     case Seq(("$date", JsNumber(ts))) if ts.isValidLong => 
     JsSuccess(new DateTime(ts.toLong)) 
     case _ => 
     JsError(__, "validation.error.expected.$date") 
    } 
) 

    val dateWrites: Writes[DateTime] = new Writes[DateTime] { 
    def writes(dateTime: DateTime): JsValue = Json.obj("$date"-> dateTime.getMillis()) 
    } 

    Format(dateReads, dateWrites) 
} 

, но и для хранения списка DateTimes он не работает. заблаговременно за помощь

+0

Не могли бы вы предоставить выходной/StackTrace вы получаете? – manub

+0

Что означает «не работает»? –

+0

i определенная модель, подобная этому классу test (даты: List [Datetime], ....) с использованием вышеуказанного форматирования, неявный val dateModelFormat: OFormat [test] = ( (JsPath \ "_id"). Format [String] и (JsPath \ "time"). [List [DateTime]], но он не wrking в db, он сохраняет номер Long вместо datetime – kittu

ответ

0

Вам необходимо создать неявный json Writer и Reader для списка [DateTime]. В вашем примере вы определяете, как сериализовать и десериализовать тип DateTime. Добавление этого ниже форматера должно сделать фреймворк ноу-хау как JSONify Списки DateTime. См рабочий пример ниже:

val dateStandardFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS" 

    val dateReads: Reads[DateTime] = Reads[DateTime](js => 
    js.validate[JsObject].map(_.value.toSeq).flatMap { 
     case Seq(("$date", JsNumber(ts))) if ts.isValidLong => 
     JsSuccess(new DateTime(ts.toLong)) 
     case _ => 
     JsError(__, "validation.error.expected.$date") 
    } 
) 

    val dateWrites: Writes[DateTime] = new Writes[DateTime] { 
    def writes(dateTime: DateTime): JsValue = Json.obj("$date" -> dateTime.getMillis()) 
    } 

    implicit def dateFormat = Format(dateReads, dateWrites) 

    implicit val listDateTimeFormat = Format(Reads.list[DateTime](dateReads), Writes.list[DateTime](dateWrites)) 

    val m = List(DateTime.now(), DateTime.now(), DateTime.now(), DateTime.now(), DateTime.now()) 

    println(Json.toJson(m).toString()) 
+0

, когда я пытался использовать неявный val listDateTimeFormat = Format (Json.reads [List [DateTime] ]], Json.writes [List [DateTime]], он выдает ошибку, которая не найдена с помощью функции unapply или unapplySeq [ошибка] implicit val write = Json.writes [List [DateTime]] – kittu

+0

Привет, Китту, я обновил пример как Я сделал небольшую ошибку в своем первоначальном ответе –