[英]How to write a play-json Reads for Map[(Int, Int), A]?
[英]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.