json - 如何将所有拒绝内容转换为Spray中的自定义json?

标签 json scala spray spray-json

当spray(spray.io)产生拒绝时,它会以字符串形式响应。由于我所有的API客户端都将假定我的API仅返回json,因此我想全局地使每个拒绝都符合我们的错误对象格式的有效json对象。我怎样才能做到这一点?

错误对象格式如下所示

{
    'details' : 'Something happened in the app. boooo!',
    'errorType' : 'Unknown'
}

errorType是我的内部枚举样式的值列表,例如UserNotFoundNeedPaidAccount

最佳答案

如果您只想将所有拒绝项转换为自定义json格式,则可以创建一个拒绝处理程序。例如,我将其放在ServiceActor中并执行以下操作:

class ApiServiceActor extends Actor with HttpServiceActor with ApiServices {
  def jsonify(response: HttpResponse): HttpResponse = {
    response.withEntity(HttpBody(ContentType.`application/json`,
      JSONObject(Map(
        "details" -> response.entity.asString.toJson,
        "errorType" -> ApiErrorType.Unknown.toJson
      )).toString()))
  }

  implicit val apiRejectionHandler = RejectionHandler {
    case rejections => mapHttpResponse(jsonify) {
      RejectionHandler.Default(rejections)
    }
  }

  def receive = runRoute {
    yourRoute ~ yourOtherRoute ~ someOtherRoute
  }
}

关于json - 如何将所有拒绝内容转换为Spray中的自定义json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16929396/

相关文章:

scala - 在 akka-http 响应后,Scala future 是否继续运行?

scala - 如何指定喷雾Content-Type响应 header ?

javascript - 将 MySQL 数组转换为 json 数组

ios - 将 JSON 元素作为 Sections Title 和 Cell title 放入 TableView

javascript - 如何使用可展开的 props 来检索 ReactJS 中的嵌套对象?

scala - 从光滑表定义创建表

scala - Scala 中的运行总和流

scala - akka actor 中的增量处理

scala - Spray/Akka 缺失隐式

php - 在动态页面之间传递大字符串值的安全方法