播放 2.5 错误 - CompletionStage<WSResponse> 无法转换为 F.Promise<WSResponse>

Play 2.5 error - CompletionStage<WSResponse> cannot be converted to F.Promise<WSResponse>

希望有人能提供帮助。我正在尝试从 Play 2.4 升级到 2.5。升级后,我在 JavaController class 中遇到错误。其中一个错误显示

[error] /Play-2-JS-2.5/app/controllers/JavaController.java:87: java.util.concurrent.CompletionStage cannot be converted to play.libs.F.Promise [error] WS.url("http://example.com").get()

似乎在升级到 2.5 时 WSReponse 可能已被弃用。我试图在第 87 行 https://github.com/btgrant-76/Play-2-Java-Scala-Java-8-Async-Comparison/blob/6a85cf31cfb804ef20bacf8e14d30ce46cc9307c/app/controllers/JavaController.java#L87 上用 CompletionStage 替换 F.Promise,但得到了同样的错误。我在谷歌上搜索了很长一段时间,发现了有关依赖注入的主题,但是没有任何示例。任何例子 and/or 从这里到哪里都会很棒。

如果你更换了

final F.Promise<WSResponse> responsePromise = WS.url("http://example.com").get();

final CompletionStage<WSResponse> responsePromise = WS.url("http://example.com").get();

仍然得到同样的错误,然后要检查的事情包括:

  1. 重新编译前是否保存源代码?如果 F.Promise 在错误消息中提到但没有出现在代码中,那就有问题了。在 Play 2.5 中,WSResponse.get 具有签名 java.util.concurrent.CompletionStage<WSResponse> get(),因此 F.Promise 不应该来自那里。请参阅 the javadoc 以供参考。

  2. 检查 class 路径中的 Play jar 版本。如果您从 2.4 转换到 2.5,您可能仍然有依赖项将 Play 2.4 jar 作为传递依赖项引入。如果您没有使用 IDE,它应该为您显示 class 路径,请使用工具 like this one 查看依赖项。

编辑

根据您评论中给出的错误消息,您导入了错误的 WSResponse class,因为您混用了 Java 和 Scala API .看起来您正在导入 play.api.libs.ws.WSResp‌​onse 而不是 play.libs.ws.WSResp‌​onse(请注意包的 api 部分,这表示 Scala API)。