Hiran
Hiran

Reputation: 698

Play WS API Making nested requests - WSClient

I want to make two HTTP requests(POST) using play2 WSRequest where some information from the first response is send to the second request. I tried to do this in following manner to make sure second request is only triggers after the first one is completed. But I get Type mismatch: cannot convert from F.Promise to F.Promise error

public Promise<Result>  executeAPI(String apiName,JsonNode requestBody){



    WSRequest pcLoginRequest = ws.url("http://xxxxx.qa.local:8080/mytest/rest/login");
    pcLoginRequest.setContentType("application/json");      
    pcLoginRequest.setHeader("X-x-Password", "xxxxx")
            .setHeader("X-x-Username", "xxxxx")
            .setHeader("X-x-Content-Type", "application/json");

    Promise<Result> myPromise = pcLoginRequest.post("").map(response -> {           


        ProApiSession.getInstanceOf().setProToeken(response.asJson().get("token").asText());


        WSRequest pcrequest = ws.url("http://xxxxx.qa.local:8080/mytest/rest/api/" + apiName);
        pcrequest.setContentType("application/json");       
        pcrequest.setHeader("X-x-Token",ProApiSession.getInstanceOf().getProToeken() )
                .setBody(requestBody)
                .setHeader("X-x-Content-Type", "application/json");


        Promise<Result>  myPromise2 = pcLoginRequest.post(requestBody).map(response2 -> {
                      return Results.ok(response2.asJson());
                });

        return myPromise;

    }); 

Can someone please suggest how to do nested request using WSRequest in play. (import play.libs.ws.* )

Upvotes: 0

Views: 381

Answers (1)

James Roper
James Roper

Reputation: 12850

Java 8 type inference errors are bad at the best of times. Since the result of the lambda you're passing to the first map is Promise<Result>, what you're trying to assign to myPromise is Promise<Promise<Result>>. What you actually want to do is replace the map call with flatMap, which is so named because is "flattens" the nested promise to just be a single promise.

Upvotes: 2

Related Questions