Использование заголовков Http для распаковки ответа с помощью spray-client

Я использую spray-client для доступа к службе REST. Часть данных, возвращаемых сервером, находится в заголовках ответа http (остальные — в теле ответа).

Чтобы иметь возможность разобрать ответ, я использую Unmarshaller. Однако демаршаллер может получить доступ только к телу ответа (как экземпляру HttpEntity), и все заголовки на этом этапе кажутся недоступными.

Вот текущий конвейер и коды unmarshaller:

  implicit val IDsUnmarshaller = 
    Unmarshaller[List[ID]](MediaTypes.`text/plain`) {
      case HttpEntity.NonEmpty(contentType, data) => 
        data.asString.split("\n").toList.map( ID(_) )
    }

  val pipeline: HttpRequest => Future[List[ID]] = (
    encode(Gzip)
    ~> sendReceive
    ~> decode(Deflate)
    ~> unmarshal[List[ID]]
  )

Есть ли способ получить к ним доступ при распаковке? Есть ли работа вокруг?


person paradigmatic    schedule 25.02.2014    source источник
comment
Если вы укажете FromResponseUnmarshaller вместо простого Unmarshaller, у вас также будет доступ к заголовкам.   -  person jrudolph    schedule 25.02.2014
comment
Спасибо за предложение. Знаете ли вы, существует ли какой-либо фабричный метод для создания FromResponseUnmarshaller?   -  person paradigmatic    schedule 25.02.2014
comment
Способы создания FromResponseUnmarshallers см. в этом файле: https://github.com/spray/spray/blob/master/spray-httpx/src/main/scala/spray/httpx/unmarshalling/Deserializer.scala   -  person jrudolph    schedule 25.02.2014
comment
Например. вы можете предоставить неявную функцию HttpResponse => List[ID], и ее следует подобрать.   -  person jrudolph    schedule 25.02.2014
comment
Спасибо @jrudolph, это работает, и это именно то, что я искал. Если вы скопируете это в ответ, я приму это.   -  person paradigmatic    schedule 26.02.2014


Ответы (1)


Если вы предоставите FromResponseUnmarshaller вместо обычного Unmarshaller, у вас также будет доступ к заголовкам.

Способы создания FromResponseUnmarshallers см. в этом файле: https://github.com/spray/spray/blob/master/spray-httpx/src/main/scala/spray/httpx/unmarshalling/Deserializer.scala

Например. вы можете предоставить неявную функцию HttpResponse => List[ID], и ее следует подобрать.

person jrudolph    schedule 06.06.2015