我的目标是实现依赖于可能冗长的操作的HTTP请求的控制器方法。我了解到控制器应该是非阻塞的,我可以return a Promise而不是结果:
public F.Promise<Result> demo() {
final F.Promise<WSResponse> upstreamResponse = WS.url(SOME_ENDPOINT).get();
F.Promise<Result> ourResult = upstreamResponse.map(new F.Function<WSResponse, Result>() {
@Override
public Result apply(WSResponse wsResponse) {
final String body = someMethod(wsResponse);
final Map<String, String> headers = otherMethod(wsResponse);
// What do I do with headers?
return ok(body);
}
});
return ourResult;
}
使用此方法,我们可以指定正文,可选择内容类型和状态代码。但是,我们无法添加其他客户标头。
在返回纯结果的控制器方法中,我们可以使用
response().setHeader(name, value);
如何在上面的异步代码中实现相同的效果?
注意:我是Play Framework的新手,并且会接受任何其他解决方案来设置响应标头。