0

我正在尝试执行一个验证规则,即输入 Json 中的时间戳必须使用 format 指定时区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))
  )
}

但是会抛出一个DateTimeParseExceptionif 格式错误。

如何修复它以返回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 回答