Scala / Spray:将所有拒绝作为JSON返回

时间:2014-05-08 01:38:32

标签: json scala spray

我正在使用Spray 1.2.1编写JSON API,我希望默认以以下格式返回所有HTTP响应。

{ "type":"error", "status":404, "message":"Not Found" }

我自己的自定义拒绝/例外信息在“消息”中的通用内容较少。但是我正在寻找一种全局格式化(并且可能以其他方式装饰,用于调试/测试)所有非2xx响应的方法。

这是否可以在不处理所有可能的拒绝和状态代码的情况下实现?

谢谢!

萨姆

1 个答案:

答案 0 :(得分:0)

我不知道这对你来说是否足够通用,但这就是我如何做类似的事情:

import spray.json.DefaultJsonProtocol

case class Rejection(type:String, status: Int, message: String)

object RejectionJsonProtocol extends DefaultJsonProtocol{
   implicit val rejectionFormat = jsonFormat3(Rejection)
}

然后你可以使用拒绝完成你的路由,可能在你的RouteExceptionHandler中这样:

trait RouteExceptionHandlers extends HttpService {

  import RejectionJsonProtocol._

  implicit def routeExceptionHandler(implicit log: LoggingContext) = ExceptionHandler {
    case e: UnsuccessfulResponseException =>
      requestUri { uri =>
        complete(e.response.status, Rejection("error",e.response.status,"Not found"))
      }
  }
    //other exceptions go here
}