Play Framework 2 无法正确验证 Json 数组(内部代码)

Play Framework 2 cannot properly validate Json Arrays (code inside)

我想使用 Play 上传 JSON 实体数组。

我的模型是这样的:

case class Pet(name: String, age: Int)
object Pet {  
    implicit val petReads: Reads[Pet] = (
    (JsPath \ "name").read[String](minLength[String](2)) and
    (JsPath \ "age").read[Int](min(0))
    )(Pet.apply _)
)

我的 JSON 输入是一个 JSON 条目数组。例如:

'[{"name": "Scooby","age":7},{"name": "Toothless","age": 3}]'

处理条目的操作是这样的:

def create = Action(BodyParsers.parse.json) { implicit request =>
   val entries = request.body.validate[Seq[Pet]]
   entries.fold(errors => {BadRequest(Json.obj("status" -> "Bad Request",     "message" -> JsError.toJson(errors)))},
   elements => {//do something with it
   Ok(Json.obj("status" -> "OK", "message" -> (Json.toJson("Done."))))})
}

我希望我的验证能够检测到值问题。例如,如果 string.length < 2age 数字为负数。

但是它不适用于 .validate[Seq[Pet]] 的数组。名称为 length < 2 的条目可以通过验证。

如果我尝试将每个条目单独上传为一个简单的 JSON 条目(而不是 json 数组)并改用 .validate[Pet],一切正常。关于如何调整验证以使其适用于数组的任何提示?

找到解决方案,只需使用 .validate[Array[Pet]] 即可开箱即用。