我正在使用Spray 1.2.1编写JSON API,我希望默认以以下格式返回所有HTTP响应。
{
"type":"error",
"status":404,
"message":"Not Found"
}
我自己的自定义拒绝/例外信息在“消息”中的通用内容较少。但是我正在寻找一种全局格式化(并且可能以其他方式装饰,用于调试/测试)所有非2xx响应的方法。
这是否可以在不处理所有可能的拒绝和状态代码的情况下实现?
谢谢!
萨姆
答案 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
}