2016-12-15 5 views
0

Использование Акка-клиент HTTP:Unmarshaler для HttpResonse Headers к Т

, что это лучший способ извлечения или Демаршаллизация HttpResponse заголовки в случае класса T? Моя текущая попытка:

класс UnmarshallerSpec расширяет AkkaSpec ("распаковать") с ScalaFutures с WordSpecLike с Matchers с BeforeAndAfterAll с BeforeAndAfterEach {

import AmbryPostResponseUnmarshalling._ 
    import akka.http.scaladsl.unmarshalling._ 

    case class AmbryPostFileResponse(ambryId: String) 
    val ambryBlobInfo = new AmbryPostFileResponse("ambryId") 



    val testHttpResponse = HttpResponse(status = StatusCodes.OK, headers = List(Location("ambryId"))) 

    "Unmarshaler" should { 
    "unmarshal" in { 
     val result = Unmarshal(testHttpResponse).to[AmbryPostFileResponse] 
     whenReady(result, timeout(10 seconds)) { r => 
     r shouldEqual ambryBlobInfo 
     } 
    } 
    } 

    object AmbryPostResponseUnmarshalling extends AmbryPostResponseUnmarshalling 

    trait AmbryPostResponseUnmarshalling { 
    implicit final val fru: FromResponseUnmarshaller[AmbryPostFileResponse] = { 
     // val h: Class[Location] = headers.Location.getClass[Location] 
     def unmarshal(response: HttpResponse) = 
     AmbryPostFileResponse(response.getHeader("Location").get.asInstanceOf[Location].uri.toString()) 

     Unmarshaller.strict(unmarshal) 
    } 

    } 

} 
+0

Не могли бы вы рассказать больше о том, чего вы пытаетесь достичь? Например, некоторые примеры кода того, что вы уже пробовали, обычно очень помогают другим людям понять проблему, с которой вы сталкиваетесь. –

+0

Я обновил свой вопрос – Rabzu

ответ

0

я улучшил его. Моя предыдущая попытка Unmarshaller использовала API java, который возвращался. Опционально вызывал всевозможные проблемы:

case class AmbryPostFileResponse(ambryId: String) 

val ambryBlobInfo = new AmbryPostFileResponse("ambryId") 

val testHttpResponse = HttpResponse(status = StatusCodes.OK, headers 
    = List(Location("ambryId"))) 

     "Unmarshaler" should { 
     "unmarshal" in { 
      val result = Unmarshal(testHttpResponse).to[AmbryPostFileResponse] 
      whenReady(result, timeout(10 seconds)) { r => 
      r shouldEqual ambryBlobInfo 
      } 
     } } 

    implicit final val fromUploadResponse: FromResponseUnmarshaller[AmbryPostFileResponse] = { 

     // val h: Class[Location] = headers.Location.getClass[Location] def unmarshal(response: HttpResponse) = { 

     val locheader = response 
      .headers 
      .collect { 
      case l:Location => l 
      } 
      .headOption 
      .getOrElse(throw new NoSuchElementException("header not found: Location")) 

     AmbryPostFileResponse(AmbryId(locheader.uri.toString)) } Unmarshaller.strict(unmarshal) }