玩 WS API 发出嵌套请求 - WSClient
Play WS API Making nested requests - WSClient
我想使用 play2 WSRequest 发出两个 HTTP 请求 (POST),其中来自第一个响应的一些信息被发送到第二个请求。我尝试按照以下方式执行此操作,以确保第二个请求仅在第一个请求完成后触发。但是我得到 Type mismatch: cannot convert from F.Promise to F.Promise 错误
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;
});
有人可以建议如何在游戏中使用 WSRequest 进行嵌套请求。 (导入 play.libs.ws.* )
Java 8 种类型推断错误在最好的时候也是很糟糕的。由于您传递给第一个 map
的 lambda 的结果是 Promise<Result>
,因此您尝试分配给 myPromise
的结果是 Promise<Promise<Result>>
。您真正想要做的是用 flatMap
替换 map
调用,之所以这样命名是因为 "flattens" 嵌套承诺只是一个承诺。
我想使用 play2 WSRequest 发出两个 HTTP 请求 (POST),其中来自第一个响应的一些信息被发送到第二个请求。我尝试按照以下方式执行此操作,以确保第二个请求仅在第一个请求完成后触发。但是我得到 Type mismatch: cannot convert from F.Promise to F.Promise 错误
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;
});
有人可以建议如何在游戏中使用 WSRequest 进行嵌套请求。 (导入 play.libs.ws.* )
Java 8 种类型推断错误在最好的时候也是很糟糕的。由于您传递给第一个 map
的 lambda 的结果是 Promise<Result>
,因此您尝试分配给 myPromise
的结果是 Promise<Promise<Result>>
。您真正想要做的是用 flatMap
替换 map
调用,之所以这样命名是因为 "flattens" 嵌套承诺只是一个承诺。