6

スプレー (spray.io) が拒否を生成すると、文字列の本体で応答します。私のすべての API クライアントは、私の API が json のみを返すと想定するため、すべての拒否をグローバルに、エラー オブジェクト形式に準拠する有効な json オブジェクトにしたいと考えています。どうすればこれを実現できますか?

エラーオブジェクトのフォーマットは次のようになります

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

UserNotFounderrorType は、およびのような値の内部の列挙型スタイルのリストです。NeedPaidAccount

4

1 に答える 1

13

すべての拒否をカスタム json 形式に変換するだけの場合は、拒否ハンドラーを作成できます。たとえば、これを my に入れ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
  }
}
于 2013-06-05T00:00:07.047 に答える