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?