2016-11-03 4 views
3

фона: Я звоню бэкэнд WebServices из Play controller и отправки Response (в JSON формате) для AngularJS модуля завернутые в play.mvc.Result. Эта интеграция работает без проблем.Как разобрать ответ от WebService вызова в Play 2.3.x

Заявление об ошибке: теперь я хочу разобрать Response и использовать его для какой-либо бизнес-логики; но play.mvc.Result класс имеет только один метод, который равен toScala(). Как получить тело play.mvc.Result. Могу ли я использовать play.libs.F.Promise, чтобы выполнить свою работу?

Ниже представлен Обобщенный код, который принимает тело запроса JSON и URL-адрес службы как параметр и возвращает play.mvc.Result.

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); 
    } 
})); 

Так есть ли способ, чтобы извлечь тело из Responseplay.mvc.Result или есть альтернативный способ сделать это?

ответ

0

Ниже код будет Разбираем ответа от WebService вызова в синхронном образом:

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(); 
Смежные вопросы