有没有办法将javadsl Route转换为Flow?在Scala中,我们隐式使用handlerFlow,但在Java中我们没有类似的东西。
尝试调用handlerFlow,但它使用scaladsl类型并且与路径的javadsl版本不兼容。
我想使用低级版本的API来绑定到http和https,以及能够访问连接。
==========================
更新:
我使用了svezfaz答案中的想法,现在我得到了代码:
Flow<HttpRequest, HttpResponse, NotUsed> createFlow(ActorSystem system, Materializer mat) {
scala.Function1<akka.http.scaladsl.server.RequestContext, scala.concurrent.Future<akka.http.scaladsl.server.RouteResult>> r = RouteImplementation.apply(createRoute());
Flow f = RouteResult$.MODULE$.route2HandlerFlow(
r,
RoutingSettings$.MODULE$.apply(system),
ParserSettings$.MODULE$.apply(system),
mat,
RoutingLog$.MODULE$.fromActorSystem(system),
null,
RejectionHandler$.MODULE$._mthdefault(),
null
).asJava();
return f;
}
它看起来正确,但它不能编译。可能,我必须将Scala Library包含在classpath中。然后使用其他Scala-to-Java类型转换进行一些工作。
我认为用Java中的路由重写它会更容易。
答案 0 :(得分:1)
您可以从var classA1 = new Any.Namespace.01.ClassA();
var classA2 = new Different.Namespace.ClassA();
获取灵感(见下文)。
使用akka.http.javadsl.server.HttpServiceBase
将javadsl转换为scaladsl,然后调用RouteImplementation
转换为流。
route2HandlerFlow
答案 1 :(得分:1)
在akka-http 10.0.6中,您可以使用
akka.http.scaladsl.server.Route.handlerFlow(route: Route): Flow[HttpRequest, HttpResponse, NotUsed]
需要一些隐含的内容,但它们很容易进入范围。