Рассмотрим преобразование JsResultException.errors
, которое
Seq[(JsPath, Seq[JsonValidationError])]
, где JsonValidationError.errors
- еще одна последовательность Seq[String]
, в более простой набор
Seq[(JsPath, String)]
вроде так
case JsResultException(errors) =>
errors.map { case (path, validationErrors) => path -> validationErrors.map(_.messages.mkString(",")).mkString(",") }
Это даст более управляемую структуру, похожую на
List((/id,error.path.missing), (/name,error.path.missing))
вместо
List((/id,List(JsonValidationError(List(error.path.missing),WrappedArray()))), (/name,List(JsonValidationError(List(error.path.missing),WrappedArray())))))]
Вот рабочий пример
case class User(name: String, id: Int)
object User {
implicit val formats = Json.format[User]
}
val raw = """{ "nam": "mario", "i": 5 }"""
try {
Json.parse(raw).as[User]
} catch {
case JsResultException(errors) =>
errors.map { case (path, validationErrors) => path -> validationErrors.map(_.messages.mkString(",")).mkString(",") }
}
Также рассмотрим , используя проверку , чтобы избежать создания исключений, подобных
Json.parse(raw).validate[User] match {
case s: JsSuccess[User] => s
case JsError(errors) =>
errors.map { case (path, validationErrors) => path -> validationErrors.map(_.messages.mkString(",")).mkString(",") }
}