如何将Unmarshaller应用于HttpRequest-> HttpResponse流程

时间:2016-09-09 08:32:55

标签: java akka akka-stream akka-http

我在我的java项目中使用akka框架来处理HTTP服务,这就是我使用javaDSL处理akka流的原因。那么,我的故事如下。 我创建了http缓存池(在我的演员中):

val pool = Http.get(getContext().system()).cachedHostConnectionPool(
            "https://somehost.com",
            ActorMaterializer.create(getContext().system())
    )

然后我基于HttpRequest创建了一个源:

val source = Source.single(HttpRequest.GET("/resources/123/"))

然后我创建了用于将HttpReponse转换为精确实体的unmarshaller:

val unmarshaller = Jackson.unmarshaller(objectMapper, ResourceEntity.class)

下一步是通过池传递源来处理我的actor中的响应:

source.via(pool)
      // TODO: unmarshalling
      .to(Sink.actorRef(getSelf(), new FlowCompletedMessage()))
      .run(ActorMaterializer.create(getContext().system()));

问题是如何将unmarshaller应用于此流程?我没有找到任何例子,我觉得自己就像一个试图将方形图推入圆孔的孩子......

1 个答案:

答案 0 :(得分:0)

这些方面的东西:

source.via(pool)
      .mapAsync(response => Unmarshal(response).to[T])
      .to(Sink.actorRef(getSelf(), new FlowCompletedMessage()))
      .run(ActorMaterializer.create(getContext().system()));