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

时间:2016-08-18 18:26:57

标签: json scala playframework playframework-2.0

我想使用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]代替,那么一切正常。有关如何调整验证以使其适用于数组的任何提示吗?

1 个答案:

答案 0 :(得分:0)

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