2016-10-27 7 views
0

私はakka httpを使用しています。私は彼らが、それぞれ以下のjsonsに整列化したいと思いToResponseMarshaller in Akka http

sealed abstract class ApiResponse[A](val content: A, val code: Int) 

final case class Success[A](override val content: A, override val code: Int) extends ApiResponse(content, code) 

final case class Failure[A](override val content: A, override val code: Int) extends ApiResponse(content, code) 

{ "ok" : "true", "content" : "..." } 

{ "ok" : "false", "content" : "..." } 

そしてまた、私はあることをコードがしたい私のAPI層では、私は次のクラスが定義されていますレスポンスにhttpステータスコードとして設定します。私はこれのためにToReponseMarshallerを定義しようとしましたが、これが私の問題の正しい選択であるかどうかはわかりません。

答えて

1

これには、spray-jsonと、Akka-httpとの統合が推奨されます。あなたは、あなたのJSONオブジェクトをしたいと同じように、あなたのケースクラスを定義する必要があります。

case Response(ok: String, content: String) 

次にあなたがAA JsonProtocolを作成する必要があります。

trait ResponseJsonProtocol extends SprayJsonSupport with DefaultJsonProtocol { 
    implicit val responseFormat = jsonFormat2(Response) 
} 

そして、あなたのルートで使用することを:

val route = 
    path("something") { 
    complete(Response("false", "some content")) 
    } 

異なるステータスコードで応答する場合は、このように完了するためにタプルを渡すことができます

このため0
complete { 
    StatusCodes.BandwidthLimitExceeded -> MyCustomObject("blah blah") 
} 

必要な輸入品は以下のとおりです。

import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport 
import spray.json._ 

また、あなたは新しい依存関係を持参する必要があります。

libraryDependencies += "com.typesafe.akka" % "akka-http-spray-json-experimental_2.11" % "2.4.11" 
+0

私はあなたのソリューションを使用して、異なるステータスコードを設定できますか? – user3763116

+0

必要な値を持つ 'Response'インスタンスが必要です。レスポンス( "false"、 "some content") 'または' Response( "true"、 "some other content") 'を実行することができ、' {"ok": "false"、 "content": "一部のコンテンツ "}'または '{" ok ":" true "、" content ":"その他のコンテンツ "} – hveiga

+0

HTTPステータスコードについて質問しています。 – user3763116

関連する問題