scala – 在Play框架中处理异常

前端之家收集整理的这篇文章主要介绍了scala – 在Play框架中处理异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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链接是您的问题的最佳选择,另一种解决方案是使用 action composition并创建您的操作(如果您希望对您的操作有更高的控制权):

def APIAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  Action { request =>
    try { f(request) } 
    catch { case _ => InternalServerError(...) }
  }
}

def index = APIAction { request =>
  ...
}

或者使用更惯用的Scala尝试:

def APIAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  Action { request =>
    Try(f(request))
      .getOrElse(
        InternalServerError(Json.obj("code" -> "500","message" -> "Server error"))
      )
  }
}

猜你在找的Scala相关文章