2017-01-04 11 views
0

将来の応答に基づいてさまざまなタイプのakka-http応答を完成させるにはどうすればいいですか? 私はakka-httpで完全な応答が異なるタイプ

implicit val textFormat = jsonFormat1(Text.apply) 
implicit val userFormat = jsonFormat2(User.apply) 
path(Segment) { id => 
       get { 
       complete { 
        (fooActor ? GetUser(id)).map { 
        case n: NotFound => Text("Not Found") 
        case u: User => u 
        } 
       } 

       } 
      } 

ような何かをしようとしていますが、私はあなたがonCompleteディレクティブ使用することができ

type mismatch , expected: ToResponseMarshable , actual Futue[Product with Serializable ] 
+0

をカスタム 'User'クラスをunmarshallします。定義する必要があります。 Unmarshallerセクションを参照して、このページのリンクを開きます:http://doc.akka.io/docs/akka-http/current/java/http/routing-dsl/marshalling.html – Brian

+0

@brian私は両方の場合にユーザーと返信します。それはOKです。また、ユーザーの範囲にアンマーシャラーがありません。 – igx

答えて

2

を取得しています:私はそれがどのように認識していないので、それがあると思い

get { 
    path(Segment) { id => 
    onComplete(fooActor ? GetUser(id)) { 
     case Success(actorResponse) => actorResponse match { 
     case _ : NotFound => complete(StatusCodes.NotFound,"Not Found") 
     case u : User => complete(StatusCodes.OK, u) 
     } 
     case Failure(ex) => complete(StatusCodes.InternalServerError, "bad actor") 
    } 
    } 
} 
+0

素晴らしいです!多くのありがとう –

+0

@QuyTangよろしくお願いします。ハッピーハッキング! –

関連する問題