【问题标题】:Error handling in play framework播放框架中的错误处理
【发布时间】:2014-10-22 06:09:22
【问题描述】:

我正在使用播放框架开发 REST API。我想对我的所有操作实施集中式错误处理。

实现这一目标的最佳方法是什么?

【问题讨论】:

  • 你以前看过 Scala Future 和 Play action/result 吗?
  • @applicius:我不太确定您的评论如何解释在播放应用程序中执行集中错误处理的正确位置...
  • 我不太确定您是否阅读过有关 Action、Action 组合、Action 构建和 Future 使用的 Play 框架文档。

标签: scala playframework playframework-2.3


【解决方案1】:

另一种方法是使用filter,例如:

object ExceptionFilter extends EssentialFilter {
  def apply(nextFilter: EssentialAction) = new EssentialAction {
    def apply(requestHeader: RequestHeader) = {
      val next: Iteratee[Array[Byte], Result] = nextFilter(requestHeader)

      // Say your backend throws an ItemNotFound exception.
      next recoverWith {
        case e: ItemNotFound => Iteratee.ignore[Array[Byte]]
          .map(_ => Results.NotFound("Item not in the database!"))
      }
    }
  }
}

然后将其连接到您的全局设置中:

object Global extends WithFilters(CSRFFilter(), ExceptionFilter) with GlobalSettings

这可能允许您在需要时对请求正文执行某些操作。我同意在大多数情况下使用GlobalSettings.onError 可能是最简单的方法。

【讨论】:

    【解决方案2】:

    你应该看看GlobalSettingshttps://www.playframework.com/documentation/2.3.x/ScalaGlobal

    特别是,它允许您覆盖:

    def onError(request: RequestHeader, ex: Throwable)
    def onHandlerNotFound(request: RequestHeader)
    def onBadRequest(request: RequestHeader, error: String)
    

    onError 可能是您正在寻找的那个,但其他的也可能有用:)

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多