簡體   English   中英

如何在Play 2.3.x中解析來自WebService調用的響應

[英]How to parse Response from WebService call in Play 2.3.x

背景:我從Play controller調用后端Web服務,並將Response (以JSON格式)發送到包含在play.mvc.Result AngularJS模塊。 這種集成無縫地工作。

問題陳述:現在我想解析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);
    }
}));

那么有沒有辦法從play.mvc.Result提取Response主體,還是有其他方法可以做到這一點?

下面的代碼將以同步方式解析來自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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM