0
我要上傳使用播放實體的JSON數組。播放框架2不能正確驗證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 < 2
或age
數字是負數。
但是它不會爲陣列,.validate[Seq[Pet]]
工作。名稱爲length < 2
的條目可以通過驗證。
如果我嘗試每個條目分別上載一個簡單的JSON條目(不是JSON數組),並使用.validate[Pet]
代替,一切工作正常。任何提示如何調整驗證,以便它適用於數組?
有關使用方法:https://github.com/eclipsesource/play-json-schema-validator? –
如果'validate'對單個條目起作用,並且'entries'是這樣的條目的數組,那麼爲什麼'forEach'或'map'無法跨越'entries'進行驗證呢? 'request.body.map(x => x.validate [Seq [Pet]]'或類似的東西?(注意:我不知道具體的方法,所以我不知道如何精確地做到這一點。 ) –
是的,我想過他們,但是scala的迭代函數沒有一個可以在'request.body'上使用。 – Mnemosyne