對於akka路由,我們使用完整如下。完成(HttpResponse)Akka完整參數類型
這個完整的函數是否只接受來自akka.scalads.HttpResponse的HttpResponse或甚至是org.apache.http.HttpResponse。如果它不接受,有人可以解釋爲什麼嗎?
對於akka路由,我們使用完整如下。完成(HttpResponse)Akka完整參數類型
這個完整的函數是否只接受來自akka.scalads.HttpResponse的HttpResponse或甚至是org.apache.http.HttpResponse。如果它不接受,有人可以解釋爲什麼嗎?
完整的參數類型
從the documentation你可以看到complete
接受許多不同的參數類型,包括阿卡的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響應類型。
大部分HttpResponse
成員變量很容易匹配相應的apache變量,但有一個很大的例外:ResponseEntity
是一個阿卡流Source[ByteString, Any]
。 apache HttpEntity
使用InputStream
來表示不是akka /流感知的數據,因此如果沒有預先存在的akka ActorSystem
,直接轉換是不可能的。
它可以從的Apache HTTP響應阿卡HTTP響應,這將允許您通過Apache的反應來完成編寫自己的implicit conversion function:
import akka.http.scaladsl.model.{HttpResponse => AkkaResponse}
import org.apache.http.{HttpResponse => ApacheResponse}
implicit def apacheToAkka(apacheResponse : ApacheResponse) : AkkaResponse = ???
val apacheResponse : ApacheResponse = ???
complete(apacheResponse)