2016-04-19 10 views
0

bitte helfen Sie mir, ich möchte JSON Daten zu einigen API, die grundlegende Auth verwenden und ich will fangen Antwort von dieser API. dies ist mein Code:wie Antwort von Post in JavaWays bekommen playframework 2.5

@Inject 
WSClient ws; 
public Result testWS(){ 
JsonNode task = Json.newObject() 
      .put("id", 123236) 
      .put("name", "Task ws") 
      .put("done", true); 

WSRequest request = ws.url("http://localhost:9000/json/task").setAuth("user", "password", WSAuthScheme.BASIC).post(task); 
return ok(request.tojson); 

die Frage ist, wie ich Rückkehr aus ws oben und Prozess bekommen es JSon? weil dieser Code immer noch Fehler ist. Ich benutze playframework 2.5

Antwort

0

.post(task) Ergebnisse in einem CompletionStage<WSResponse>, so dass Sie nicht einfach toJson darauf anrufen können. Sie müssen die abschließende Antwort von der Vollendungsstufe erhalten (denken Sie es als ein Versprechen). Beachten Sie auch die Änderung der Methodensignatur.

import java.util.concurrent.CompletionStage; 
import javax.inject.Inject; 
import javax.inject.Singleton; 
import com.fasterxml.jackson.databind.JsonNode; 
import play.libs.Json; 
import play.libs.ws.WSAuthScheme; 
import play.libs.ws.WSClient; 
import play.libs.ws.WSResponse; 
import play.mvc.Controller; 
import play.mvc.Result; 
import scala.concurrent.ExecutionContextExecutor; 

@Singleton 
public class FooController extends Controller { 

    private final WSClient ws; 
    private final ExecutionContextExecutor exec; 

    @Inject 
    public FooController(final ExecutionContextExecutor exec, 
          final WSClient ws) { 
     this.exec = exec; 
     this.ws = ws; 
    } 

    public CompletionStage<Result> index() { 
     final JsonNode task = Json.newObject() 
            .put("id", 123236) 
            .put("name", "Task ws") 
            .put("done", true); 

     final CompletionStage<WSResponse> eventualResponse = ws.url("http://localhost:9000/json/task") 
                   .setAuth("user", 
                     "password", 
                     WSAuthScheme.BASIC) 
                   .post(task); 

     return eventualResponse.thenApplyAsync(response -> ok(response.asJson()), 
               exec); 
    } 
} 

überprüfen Sie die documentation um weitere Informationen zu den mit asynchronen Aufrufen zu Web-Service arbeiten.

+0

die Farbe von "map" und "toJson". und wenn ich es laufe. show error: Symbol nicht gefunden Symbol: Methodenzuordnung ((Antwort) [...] Json)) Speicherort: Variable eventualResponse des Typs java.util.concurrent.CompletionStage rizrusn

+0

Entschuldigung, Ich schrieb dies aus dem Gedächtnis mit der alten "F.Promise" API in meinem Kopf. Ich habe die Antwort mit dem richtigen Methodenaufruf aktualisiert. –

+0

gibt es immer noch einen Fehler, AsyncController: ungültige Methodendeklaration; Rückgabetyp erforderlich – rizrusn