Wie kann ich eine Spray API HTTPResponse dekonstruieren?

8

Ich benutze Spray API (spray-client), um eine interne Solr-URL zu treffen, ich möchte in der Lage sein, die Antwort in eine Scala-Fallklasse zu parsen.

Wenn ich nur HTTPResponse erwarte, bekomme ich einen Wert zurück, aber wenn ich versuche, es in meine Fallklasse zu marshallen, schlägt es fehl (ich kann keine andere Nachricht als null () erzeugen, weil ich es bin Verwenden von Matching und offensichtlich nicht den richtigen Testfall.)

Ich denke, mein Problem besteht darin, dass die Daten in Form von text/plain anstelle von application/json zurückgegeben werden. Wenn ich HttpResponse anstelle meiner Fallklasse erwarte,

%Vor%

Ich bekomme:

%Vor%

Aber wenn ich das ändere, um meine Fallklasse zu erwarten, kann ich nicht passen. Also, wie kann ich die Daten, die es zurückgibt, in eine Scala-Fallklasse übertragen? Folgendes habe ich versucht:

%Vor%

Das gibt mir keine Übereinstimmung in einer f onComplete ... Struktur. Könnte das Problem sein, dass meine Fallklassen nicht übereinstimmen, was zurückgegeben wird, und wenn ja, welche Vorschläge haben Sie, um sie besser zu beheben?

Ich war überall in den Dokumenten und sie sind entweder unvollständig oder etwas veraltet, und ich ' m neu bei diesem Spiel, das hilft auch nicht.

    
jbnunn 29.07.2013, 22:41
quelle

1 Antwort

6

Das wichtigste Problem, das ich mit Ihrem Code sehe, ist, dass Sie erwarten, dass mapTo den HTTP-Antworttext automatisch in Ihre Fallklassenstruktur auflöst. Die mapTo -Methode gehört zur Future -Klasse und hat keine Ahnung von der jsmarsmarshalling. Sie verwenden mapTo innerhalb einer Akka-Anfrage (was ? unter der Haube tut), um einen Future[Any] (der Standard-Antworttyp von ? ) in den Typ zu "werfen", der tatsächlich zurückgegeben wird. Dies hat nichts mit jsons Neuprogrammierung zu tun. Ich glaube, um das zu erreichen, was Sie wollen, sollten Sie ein pipeline für Spray erstellen, das sowohl die Anfrage sendet als auch die Antwort entfernt. Die Dokumentation, die Beispiele dafür zeigt, ist hier . Ich denke, für Ihr Beispiel würde es in etwa so aussehen (Code ist möglicherweise nicht 100% richtig, nur um den allgemeinen Fluss zu zeigen):

%Vor%     
cmbaxter 30.07.2013, 12:35
quelle

Tags und Links