0
我想为JSON验证编写一个scala应用程序。我有一个Animals.scala类定义以下内容:使用斯卡拉JSON验证
case class Animals (id: Int, type: String, targets: String)
object Animals {
implicit val reads: Reads[Animals] = (
(JsPath \ "id").read[Int] and
(JsPath \ "type").read[String] and
(JsPath \ "targets").read[String])(Animals.apply _)
}
我有Application.scala,我试图验证传入的JSON对案例类。
object Application extends Controller {
// action for JSON validation
def validateRequest = Action { implicit request =>
// this will fail if the request body is not a valid json value
val bodyAsJson = request.body.asJson.get
bodyAsJson.validate[Animals] match {
case success: JsSuccess[Animals] => {
val id = success.get.id
Ok("Validation passed! id is "+ id)
}
case JsError(error) => BadRequest("Validation failed!")
}
}
}
最后这里是我的JSON输入:
{
"id" : 1,
"type" : "domestic",
"targets": {
"AND": [
{
"breed": ["greyhound", "dalmatian"]
},
{
"NOT": {
"color": ["amber", "pale_amber", "black"]
}
},
{
"zipcode": ["90210", "90211"]
}
]
}
}
而且我得到以下错误: JsError(List((/targets,List(ValidationError(error.expected.jsarray,WrappedArray())))))
我认识到错误被抛出,因为targets
字段不是那样简单一个String
相比,我的JSON。我如何包装它以便验证通过?我应该做List[List[String]]
还是按照这些方法?
谢谢!通过了验证。如果我也要验证“目标”的内容,或者采取什么样的正确方法,这会有多难? – summerNight
为它们实现类和读取,以便它们坚持你的json结构 –