こんにちは、私はフレームワークをプレイするのが初めてです。誰かがより良いアプローチを知っている場合は、以下に記載してください。
だから私はモデルとそのための読み取り/書き込み/フォーマットを持っています
case class Schedule (startDate: DateTime, endDate: DateTime)
object ScheduleSerializers {
val userDateFormatter = "dd/MM/yyyy HH:mm:ss"
val nonImplicitUserFormatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss")
implicit val jodaDateTimeReads = Reads.jodaDateReads(userDateFormatter)
implicit val jodaDateTimeWrites = Writes.jodaDateWrites(userDateFormatter)
implicit val readSchedule: Reads[Schedule] = (
(__ \ "startDate").read[String].map[DateTime](dt => DateTime.parse(dt, nonImplicitUserFormatter)) and
(__ \ "endDate").read[String].map[DateTime](dt => DateTime.parse(dt, nonImplicitUserFormatter))
)(Schedule)
implicit val writeSchedule: Writes[Schedule] = (
(__ \ "startDate").write[String].contramap[DateTime](dt => nonImplicitUserFormatter.print(dt)) and
(__ \ "endDate").write[String].contramap[DateTime](dt => nonImplicitUserFormatter.print(dt))
)(unlift(Schedule.unapply))
implicit val formatSchdule = Format(readSchedule, writeSchedule)
}
今、プレイコンソールを開いてこれを行います
val sch = Json.parse(""" {
|
| "schedule" : { "starDate" : "04/02/2011 20:27:05" , "endDate" : "04/02/2011 20:27:05" }
| }
| """)
sch: play.api.libs.json.JsValue = {"schedule":{"starDate":"04/02/2011 20:27:05","endDate":"04/02/2011 20:27:05"}}
sch.validate[Schedule]
res0: play.api.libs.json.JsResult[models.experiment.Schedule] = JsError(List((/endDate,List(ValidationError(error.path.missing,WrappedArray()))), (/startDate,List(ValidationError(error.path.missing,WrappedArray())))))
エラーが発生しますが、ex の単一の日付を解析しようとすると:
scala> val singleDate = Json.parse(""" "04/02/2011 20:27:05" """)
singleDate: play.api.libs.json.JsValue = "04/02/2011 20:27:05"
singleDate.validate[DateTime]
res1: play.api.libs.json.JsResult[org.joda.time.DateTime] = JsSuccess(2011-02-04T20:27:05.000-08:00,)
「singleDate」が機能する理由について混乱していますが、「Schedule」モデルの検証は失敗します。事前に感謝します。