2016-11-03 5 views
3

Hintergrund: Ich rufe Backend WebServices von Play controller und Senden das Response (im JSON-Format) zu AngularJS Modul in play.mvc.Result gewickelt. Diese Integration funktioniert nahtlos.Wie analysieren Antwort von WebService Aufruf im Play 2.3.x

Problembeschreibung: Jetzt möchte ich die Response analysieren und für einige Geschäftslogik verwenden; aber play.mvc.Result Klasse hat nur eine Methode, die toScala() ist. Wie bekomme ich den Körper von play.mvc.Result. Kann ich play.libs.F.Promise verwenden, um meine Arbeit zu erledigen?

Unten ist der verallgemeinerte Code, der den JSON-Anfragetext und die Service-URL als Parameter akzeptiert und den play.mvc.Result zurückgibt.

WSRequestHolder requestHolder = WS.url("https://application.url/ws/endpoint") 
       .setHeader("Content-Type", "application/json"); 
final Promise<String> promise = requestHolder.post(jsonRequest) 
      .map(new Function<WS.Response, String>() { 
       @Override 
       public String apply(final Response a) throws Throwable { 
        //Do i need to Parse from here??? 
        return a.getBody(); 
       } 
      }); 

return Results.async(promise.map(new Function<String, Result>() { 
    @Override 
    public Result apply(final String a) throws Throwable { 
     if(STR_UNAUTHORIZED.equals(a)){ 
      return Results.redirect(controllers.routes.Authentication.login("","")); 
     } 
     return Results.ok(a); 
    } 
})); 

So ist es eine Möglichkeit, die Response Körper von play.mvc.Result zu extrahieren oder gibt es eine andere Möglichkeit, dies zu tun?

Antwort

0

Im Folgenden Code würde die Antwort von WebService Aufruf in synchronisierter Weise analysieren:

WSRequestHolder requestHolder = WS.url("https://application.url/ws/endpoint") 
      .setHeader("Content-Type", "application/json"); 
final Promise<WS.Response> promise = requestHolder.get(); 
Response myResponse=promise.get(50000); 
// This code returns the Parsed response in form of String 
return myResponse.getBody(); 
Verwandte Themen