3
我正在嘗試使用PlayFramework編寫乾式CRUD寧靜服務。這是它的代碼。可選的Json身體分析器
def crudUsers(operation: String) = Action(parse.json) { request =>
(request.body).asOpt[User].map { jsonUser =>
try {
DBGlobal.db.withTransaction {
val queryResult = operation match {
case "create" =>
UsersTable.forInsert.insertAll(jsonUser)
Json.generate(Map("status" -> "Success", "message" -> "Account inserted"))
case "update" =>
val updateQ = UsersTable.where(_.email === jsonUser.email.bind).map(_.forInsert)
println(updateQ.selectStatement)
updateQ.update(jsonUser)
Json.generate(Map("status" -> "Success", "message" -> "Account updated"))
case "retrieve" =>
val retrieveQ = for(r <- UsersTable) yield r
println(retrieveQ.selectStatement)
Json.generate(retrieveQ.list)
case "delete" =>
val deleteQ = UsersTable.where(_.email === jsonUser.email)
deleteQ.delete
Json.generate(Map("status" -> "Success", "message" -> "Account deleted"))
}
Ok(queryResult)
}
} catch {
case _ =>
val errMsg: String = operation + " error"
BadRequest(Json.generate(Map("status" -> "Error", "message" -> errMsg)))
}
}.getOrElse(BadRequest(Json.generate(Map("status" -> "Error", "message" -> "error"))))
}}
我注意到,更新,刪除和創建業務很好地工作。但是,檢索操作以For request 'GET /1/users' [Invalid Json]
失敗。我非常確定這是因爲JSON解析器不能容忍GET請求,而在正文中沒有傳入JSON。
有沒有辦法特殊情況下獲取/檢索操作,而不會失去我開始在這裏乾的方法?
JSON *要求*有一個頂層JSON對象或JSON陣列。 「沒有數據」是無效的JSON。參見[RFC4627](http://www.ietf.org/rfc/rfc4627.txt):'JSON-text = object/array'。 – 2012-05-30 04:15:54
好的。謝謝。看起來替代方案是構建一個更智能的解析器,它只接受獲取請求的文本內容。任何想法我怎麼能做到這一點? –