Scala 无法在Play app教程中使用WS.url()

Scala 无法在Play app教程中使用WS.url(),scala,playframework,project-structure,Scala,Playframework,Project Structure,我正在做一个使用Scala的Play framework教程。我很早就开始学习教程了,我对ws有一个问题。在我的类中,WS未被识别,尽管这表示使用WS.url(“此处的url”)并导入play.api.libs.\u,我已经完成了这两项工作。我也尝试过使用ws.url(“url here”)。。。这里可以识别出ws,但之后我得到一个“无法解析符号'url'”。这是我的build.sbt: name := """play_hello""" organization := "x.x" versio

我正在做一个使用Scala的Play framework教程。我很早就开始学习教程了,我对ws有一个问题。在我的类中,
WS
未被识别,尽管这表示使用
WS.url(“此处的url”)
并导入
play.api.libs.\u
,我已经完成了这两项工作。我也尝试过使用
ws.url(“url here”)
。。。这里可以识别出
ws
,但之后我得到一个“无法解析符号'url'”。这是我的build.sbt:

name := """play_hello"""
organization := "x.x"

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayScala)

scalaVersion := "2.12.3"

libraryDependencies ++= Seq(
"org.scalatestplus.play" %% "scalatestplus-play" % "3.1.2" % Test,
"com.ning" % "async-http-client" % "1.9.29",
guice,
ws
)
下面是我的课程代码:

package controllers

import javax.inject.Inject

import com.ning.http.client.oauth.{ConsumerKey, RequestToken}
import play.api.Play.current
import play.api.libs._
import play.api.mvc._

import scala.concurrent.Future

class Application @Inject()(cc: ControllerComponents) extends 
AbstractController(cc){
 def tweets = Action.async{
credentials.map { case (consumerKey, requestToken) =>
  WS.url("http://stream.twitter.com")
  Future.successful{
    Ok
  }
}getOrElse{
  Future.successful{
    InternalServerError("Twitter credentials are missing!")
  }
}
}

def credentials: Option[(ConsumerKey, RequestToken)] = for{
apiKey <- current.configuration.getString("twitter.apiKey")
apiSecret <- current.configuration.getString("twitter.apiSecret")
token <- current.configuration.getString("twitter.token")
tokenSecret <- current.configuration.getString("twitter.tokenSecret")
}yield (
new ConsumerKey(apiKey, apiSecret),
new RequestToken(token, tokenSecret)
)
}
包控制器
导入javax.inject.inject
导入com.ning.http.client.oauth.{ConsumerKey,RequestToken}
导入play.api.play.current
导入play.api.libs_
导入play.api.mvc_
导入scala.concurrent.Future
类应用程序@Inject()(cc:ControllerComponents)扩展
抽象控制器(cc){
def tweets=Action.async{
credentials.map{case(consumerKey,requestToken)=>
WS.url(“http://stream.twitter.com")
成功的未来{
好啊
}
}盖托莱尔斯{
成功的未来{
InternalServerError(“缺少Twitter凭据!”)
}
}
}
def凭证:选项[(ConsumerKey,RequestToken)]=for{

apiKey解决方案是将
ws:WSClient
添加到应用程序类构造函数的参数中。在较新版本的ws-library中,似乎删除了独立的ws-object

class Application @Inject()(cc: ControllerComponents, ws: WSClient) extends AbstractController(cc)
现在我可以使用:

ws.url("https://stream.twitter.com/1.1/statuses/filter.json")
此外,根据play网站上的文档,如果出于某种原因无法使用注入的WSClient,则可以创建一个实例并使用该实例