首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Play-Json将日期字符串解析为Reads[Instant]

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

Stack Overflow用户
提问于 2016-01-06 23:57:06
回答 1查看 1.2K关注 0票数 0

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

此片段用于以预期格式解析数据:

代码语言:javascript
复制
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")而不是抛出异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-07 00:29:09

您可以使用Read.flatMap代替。

代码语言:javascript
复制
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")
    }
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34645110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档