你可以做一個包裝錯誤處理行爲的方法,是這樣的:
def withParsedJsonRequest[T](actionBody: T => Future[Result])(
implicit reads: Reads[T], req: Request[JsValue]): Future[Result] = {
req.body.validate[T].fold(
invalid => { Future.successful(BadRequest("An error occured...")) }, // do error handling here!
valid => { actionBody(valid) })
}
,並用它在Action
S:
def bla = Action.async(parse.json) { implicit req =>
withParsedJsonRequest[Bla] { b =>
Future.successful(Ok)
}
}
你要通過隱T
的Reads
(用於解析JSON)到withParsedJsonRequest
函數,還有Request[JsValue]
(所以你不必重複它)。
稱爲「actionBody」的回調函數是您的行爲的肉。它需要解析T
並用它做一些事情。
我想你可以創建一個自定義Action
但何必呢......
這裏的傳統是在提問之前發佈你已經嘗試過的**! –