繁体   English   中英

Play-Json将日期时间字符串解析为Reads [Instant]

[英]Play-Json parsing date time string to Reads[Instant]

我正在尝试执行一个验证规则,即使用格式DateTimeFormatter.ISO_OFFSET_DATE_TIME必须输入Json中的时间戳必须指定一个时区。 输入不正确时,我想返回一条消息,指出格式错误。

此代码段用于解析预期格式的数据:

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")而不是引发异常?

您可以改用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")
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM