[英]Handling exceptions in Play framework
我正在使用play framework(2.3.x)來構建一個restful API。
今天我有一個try / catch塊圍繞API控制器中的所有api函數,以便能夠捕獲異常並返回一個通用的“錯誤json”對象。
例:
def someApiFuntion() = Action { implicit request =>
try {
// Do some magic
Ok(magicResult)
} catch {
case e: Exception =>
InternalServerError(Json.obj("code" -> INTERNAL_ERROR, "message" -> "Server error"))
}
}
我的問題是:是否有必要在每個api函數中使用try / catch thingy,還是有更好/更通用的方法來解決這個問題?
@Mikesname鏈接是您問題的最佳選擇,另一種解決方案是使用操作組合並創建您的操作(如果您希望對操作有更高的控制權):
def APIAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
Action { request =>
try { f(request) }
catch { case _ => InternalServerError(...) }
}
}
def index = APIAction { request =>
...
}
或者使用更慣用的Scala Try
:
def APIAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
Action { request =>
Try(f(request))
.getOrElse(
InternalServerError(Json.obj("code" -> "500", "message" -> "Server error"))
)
}
}
您可以在將來包裝任何不安全的結果,因此具有Future[Result]
,將操作轉換為異步。
def myAction = Action async Future(Ok(funcRaisingException))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.