我正在使用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")) ) } }