Play-Json 将日期时间字符串解析为 Reads[Instant]
Play-Json parsing date time string to Reads[Instant]
我正在尝试执行验证规则,即输入 Json 中的时间戳必须使用格式 DateTimeFormatter.ISO_OFFSET_DATE_TIME
指定时区。当输入不正确时,我想return提示格式错误
此代码段用于解析预期格式的数据:
implicit val instantReads = Reads[Instant] {
js => js.validate[String].map[Instant](tsString =>
Instant.from(OffsetDateTime.parse(tsString, DateTimeFormatter.ISO_OFFSET_DATE_TIME))
)
}
但如果格式错误则抛出 DateTimeParseException
。
如何将其修复为 return 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")
}
}
}
我正在尝试执行验证规则,即输入 Json 中的时间戳必须使用格式 DateTimeFormatter.ISO_OFFSET_DATE_TIME
指定时区。当输入不正确时,我想return提示格式错误
此代码段用于解析预期格式的数据:
implicit val instantReads = Reads[Instant] {
js => js.validate[String].map[Instant](tsString =>
Instant.from(OffsetDateTime.parse(tsString, DateTimeFormatter.ISO_OFFSET_DATE_TIME))
)
}
但如果格式错误则抛出 DateTimeParseException
。
如何将其修复为 return 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")
}
}
}