簡體   English   中英

處理Play框架中的異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM