首页 文章

在play框架中处理错误

提问于
浏览
4

我正在使用play框架开发REST API . 我想为我的所有操作实现集中的错误处理 .

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

2 回答

  • 5

    你应该看一下 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 可能是你要找的那个,但其他的也可能有用:)

  • 5

    另一种方法是使用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 可能是最简单的方法 .

相关问题