0

format を使用して、入力 Json のタイムスタンプにタイムゾーンを指定する必要があるという検証ルールを適用しようとしていますDateTimeFormatter.ISO_OFFSET_DATE_TIME。入力が間違っている場合、不正な形式を示すメッセージを返したい。

このスニペットは、期待される形式でデータを解析するために機能します。

implicit val instantReads = Reads[Instant] {
  js => js.validate[String].map[Instant](tsString =>
     Instant.from(OffsetDateTime.parse(tsString, DateTimeFormatter.ISO_OFFSET_DATE_TIME))
  )
}

DateTimeParseExceptionただし、フォーマットが間違っている場合は スローします。

JsError("Wrong datetime format")例外をスローする代わりに戻るように修正するにはどうすればよいですか?

4

1 に答える 1

2

代わりに使用できますRead.flatMap

implicit val instantReads = Reads[Instant] {
  _.validate[String].flatMap[Instant] { tsString =>
    try { // or Try [T]
      JsSuccess (Instant.from(OffsetDateTime.parse(tsString, DateTimeFormatter.ISO_OFFSET_DATE_TIME)))
    } catch {
      case cause: Throwable =>
        JsError("Wrong datetime format")
    }
  }
}
于 2016-01-07T00:29:09.440 に答える