Frage

Ich benutze spray-client um auf einen REST-Service zuzugreifen.Ein Teil der vom Server zurückgegebenen Daten befindet sich in den HTTP-Antwortheadern (der Rest befindet sich im Antworttext).

Um die Antwort aufheben zu können, verwende ich eine Unmarshaller.Der Unmarshaller kann jedoch nur auf den Antworttext zugreifen (als Instanz von HttpEntity) und alle Header scheinen zu diesem Zeitpunkt nicht zugänglich zu sein.

Hier ist die aktuelle Pipeline und die Unmarshaller-Codes:

  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]]
  )

Gibt es überhaupt Zugang zu ihnen, wenn man sie entmarshallt?Gibt es eine Lösung?

War es hilfreich?

Lösung

Wenn Sie einen FromResponseUnmarshaller anstelle eines einfachen Unmarshallers angeben, haben Sie auch Zugriff auf die Header.

In dieser Datei finden Sie Möglichkeiten zum Erstellen von FromResponseUnmarshallern: https://github.com/spray/spray/blob/master/spray-httpx/src/main/scala/spray/httpx/unmarshalling/Deserializer.scala

Z.B.sie können eine implizite Funktion bereitstellen HttpResponse => List[ID] und das sollte aufgegriffen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top