Question

Je suis à l'aide d' spray-client pour accéder à un service REST.Une partie des données retournées par le serveur est en-têtes de réponse http (le reste est dans le corps de la réponse).

Afin d'être en mesure de unmarshall la réponse, je suis en utilisant un Unmarshaller.Cependant, la unmarshaller ne peuvent accéder au corps de la réponse (comme une instance de HttpEntity) et tous les en-têtes semble être inaccessibles à ce stade.

Voici le pipeline actuel et le 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]]
  )

Est-il de toute façon à y avoir accès quand unmarshalling ?Est-il contourner ?

Était-ce utile?

La solution

Si vous fournissez un FromResponseUnmarshaller au lieu d'une plaine Unmarshaller vous avez également accès aux en-têtes.

Voir ce fichier, les moyens de créer FromResponseUnmarshallers: https://github.com/spray/spray/blob/master/spray-httpx/src/main/scala/spray/httpx/unmarshalling/Deserializer.scala

E. g.vous pouvez fournir une fonction implicite HttpResponse => List[ID] et qui doit être ramassé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top