in app/controllers/JsonRequestParsing.scala [9:30]
def parse[T](raw: Request[AnyContent])(fn: T => Result)(implicit reads: Reads[T]): Result = try {
raw.body.asJson match {
case Some(rawJson) =>
rawJson.validate[T] match {
case JsSuccess(request, _) =>
fn(request)
case JsError(errors) =>
val errorsByPath = errors.flatMap { case(p, e) => e.map(p -> _) } // flatten
val msg = errorsByPath.map { case(p, e) => s"$p -> $e" }.mkString("\n")
log.info(s"Error parsing request: $msg - ${raw.body}")
BadRequest(msg)
}
case None =>
log.info(s"Error parsing request: ${raw.body}")
BadRequest("Unable to parse body as JSON")
}
} catch {
commandExceptionAsResult
}