2017-07-19 68 views
0

對於akka路由,我們使用完整如下。完成(HttpResponse)Akka完整參數類型

這個完整的函數是否只接受來自akka.scalads.HttpResponse的HttpResponse或甚至是org.apache.http.HttpResponse。如果它不接受,有人可以解釋爲什麼嗎?

回答

1

完整的參數類型

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) 
相關問題