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

时间:2017-01-03 19:41:26

标签: java web-services playframework-2.5

希望有人可以提供帮助。我试图从Play 2.4升级到2.5。升级后,我在JavaController类中遇到错误。其中一个错误显示

  

[error] /Play-2-JS-2.5/app/controllers/JavaController.java:87:   java.util.concurrent.CompletionStage不能   转换为play.libs.F.Promise   [错误] WS.url(&#34; http://example.com&#34;)。get()

看起来好像WSReponse可能在转到2.5时已被弃用。我尝试在第87行https://github.com/btgrant-76/Play-2-Java-Scala-Java-8-Async-Comparison/blob/6a85cf31cfb804ef20bacf8e14d30ce46cc9307c/app/controllers/JavaController.java#L87替换F.Promise和CompletionStage但是得到了同样的错误。我已经谷歌搜索了很长时间,并找到了依赖注入的主题,但是,没有任何例子。任何例子和/或从这里去的地方都会很精彩。

1 个答案:

答案 0 :(得分:1)

如果您更换了

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. 检查类路径中的Play jar版本。如果您要从2.4转换为2.5,那么您仍然可以将Play 2.4 jar作为传递依赖项。如果您不使用IDE(应该为您显示类路径),请使用工具like this one查看依赖关系。

  3. 修改

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