playframework - 错误拦截

在一般的web框架中、比如springboot、或者springcloud。再或者struct2都会有统一错误拦截器。playframework也不例外。

使用

application.conf 添加

play.http.errorHandler = "ErrorHandler"

ErrorHandler.scala 类

import java.util.concurrent.{CompletableFuture, CompletionStage}

import exception.AuthException
import play.http.HttpErrorHandler
import play.libs.Json
import play.mvc
import play.mvc.{Http, Results}

class ErrorHandler extends HttpErrorHandler {

  override def onClientError(request: Http.RequestHeader, statusCode: Int, message: String): CompletionStage[mvc.Result] = {
    CompletableFuture.completedFuture(
      Results.status(statusCode, "A client error occurred: " + message))
  }

  override def onServerError(request: Http.RequestHeader, exception: Throwable): CompletionStage[mvc.Result] = {
    CompletableFuture.completedFuture(
      exception match {
        case e: AuthException =>
          val json = Json.newObject()
          json.put("code", "error")
          json.put("msg", e.getMessage)
          Results.badRequest(json)
        case default@_ =>
          val json = Json.newObject()
          json.put("code", "error")
          json.put("msg", default.getMessage)
          Results.internalServerError(json)
      }
    )
  }

}

定义一个授权错误类

class AuthException(msg: String) extends Exception(msg) {

}

UserController.scala 中测试

def login: Action[AnyContent] = Action {
    request =>

      if(true){
        throw new AuthException("登录失效")
      }

说明:Json.newObject() 返回的数据类型为application/json

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容