jfu*_*jfu 4 scala playframework playframework-2.3
我正在使用play框架开发REST API.我想为我的所有操作实现集中的错误处理.
实现这一目标的最佳方法是什么?
另一种方法是使用过滤器,例如:
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!"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在全局设置中将其挂钩:
object Global extends WithFilters(CSRFFilter(), ExceptionFilter) with GlobalSettings
Run Code Online (Sandbox Code Playgroud)
如果需要,这可能允许您对请求正文执行某些操作.我同意在大多数情况下使用GlobalSettings.onError可能是最简单的方法.
您应该查看GlobalSettings:https://www.playframework.com/documentation/2.3.x/ScalaGlobal
特别是,它允许您覆盖:
def onError(request: RequestHeader, ex: Throwable)
def onHandlerNotFound(request: RequestHeader)
def onBadRequest(request: RequestHeader, error: String)
Run Code Online (Sandbox Code Playgroud)
onError 可能是你正在寻找的那个,但其他可能也是有用的:)
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |