Routing Akka完全参数类型

Routing Akka完全参数类型,routing,akka,Routing,Akka,对于akka路由,我们使用以下完整选项。完成(HttpResponse) 这个完整的函数是否只接受来自akka.scalads.HttpResponse甚至org.apache.http.HttpResponse的HttpResponse。如果不接受,有人能解释原因吗?完整的参数类型 从中可以看出,complete接受许多不同的参数类型,包括akka的HttpResponse: def complete[T :ToResponseMarshaller](value: T): StandardRo

对于akka路由,我们使用以下完整选项。完成(HttpResponse)


这个完整的函数是否只接受来自akka.scalads.HttpResponse甚至org.apache.http.HttpResponse的HttpResponse。如果不接受,有人能解释原因吗?

完整的参数类型

从中可以看出,
complete
接受许多不同的参数类型,包括akka的
HttpResponse

def complete[T :ToResponseMarshaller](value: T): StandardRoute
def complete(response: HttpResponse): StandardRoute
def complete(status: StatusCode): StandardRoute
def complete[T :Marshaller](status: StatusCode, value: T): StandardRoute
def complete[T :Marshaller](status: Int, value: T): StandardRoute
def complete[T :Marshaller](status: StatusCode, headers: Seq[HttpHeader], value: T): StandardRoute
def complete[T :Marshaller](status: Int, headers: Seq[HttpHeader], value: T): StandardRoute
Apache/Akka响应

但是,Complete不接受apache响应类型

大多数
HttpResponse
成员变量很容易与相应的apache变量匹配,但有一个大的例外:
ResponseEntity
是一个akka流
Source[ByteString,Any]
。apache使用一个
InputStream
来表示不支持akka/stream的数据,因此,如果没有预先存在的akka
ActorSystem
,直接翻译是不可能的

您可以将自己的从apache http响应写入akka http响应,这将允许您传递apache响应以完成:

import akka.http.scaladsl.model.{HttpResponse => AkkaResponse}
import org.apache.http.{HttpResponse => ApacheResponse}

implicit def apacheToAkka(apacheResponse : ApacheResponse) : AkkaResponse = ???

val apacheResponse : ApacheResponse = ???

complete(apacheResponse)