Playframework Play Framework 2.5,到web套接字的路由无法编译
我正在尝试将我的WebSocket控制器代码迁移到Play 2.5,并遵循了中的说明。我的路由配置出现编译器错误。 我的WebSocket控制器代码如下Playframework Play Framework 2.5,到web套接字的路由无法编译,playframework,websocket,routes,akka-stream,playframework-2.5,Playframework,Websocket,Routes,Akka Stream,Playframework 2.5,我正在尝试将我的WebSocket控制器代码迁移到Play 2.5,并遵循了中的说明。我的路由配置出现编译器错误。 我的WebSocket控制器代码如下 package controllers import akka.actor.ActorSystem import akka.stream.Materializer import com.google.inject.Inject import utils.silhouette.{AuthenticationController, Authent
package controllers
import akka.actor.ActorSystem
import akka.stream.Materializer
import com.google.inject.Inject
import utils.silhouette.{AuthenticationController, AuthenticationEnvironment}
// This is needed to implicitly provide the Scala ActorSystem
import play.api.libs.concurrent.Execution.Implicits._
import play.api.mvc._
import play.api.libs.streams._
import scala.concurrent.Future
abstract class IntegrationMonitorProvider @Inject() (implicit system: ActorSystem,
materializer: Materializer)
extends AuthenticationController{
def monitor = WebSocket.acceptOrResult[String, String] { request =>
implicit val req = Request(request, AnyContentAsEmpty)
SecuredRequestHandler { securedRequest =>
Future.successful(HandlerResult(Ok, Some(securedRequest.identity)))
}.map {
case HandlerResult(r, Some(user)) =>
Right(ActorFlow.actorRef(IntegrationMonitor.props(req.session.get("integration").get.toLong) _))
case HandlerResult(r, None) => Left(r)
}
}
}
打算支持WebSocket的各个控制器应该扩展此功能。此模式在Play2.4中运行良好,并且此控制器代码也正在编译。
但我的路由器配置无法编译,出现以下错误
路由:56:没有足够的参数用于方法apply:(请求:play.api.mvc.RequestHeader)scala.concurrent.Future[trait websocket中的[play.api.mvc.Result,akka.stream.scaladsl.Flow[play.api.http.websocket.Message,play.api.http.websocket.Message,"]]。
未指定值参数请求
扩展IntegrationMonitorProvider的控制器如下所示
package controllers.sample
import javax.inject.Inject
import akka.actor.ActorSystem
import akka.stream.Materializer
import controllers.{IntegrationMonitor, IntegrationMonitorProvider}
import modules.oauth.{Credential, Metadata, TokenReader}
import play.Logger
import play.api.i18n.MessagesApi
import play.api.libs.json.JsResult
import play.api.mvc.{AnyContent, BodyParsers}
import utils.silhouette.{AuthenticationController, AuthenticationEnvironment}
// This is needed to implicitly provide the Scala ActorSystem
import play.api.libs.concurrent.Execution.Implicits._
import scala.concurrent.Future
class Connection @Inject()(val env: AuthenticationEnvironment, val messagesApi: MessagesApi)
(implicit system: ActorSystem,
materializer: Materializer)
extends IntegrationMonitorProvider with UrlCreator with DataReader {...
感谢您的帮助。我可以通过删除
routes
就是
GET /sample/monitor controllers.sample.Connection.monitor
而不是
GET /sample/monitor controllers.sample.Connection.monitor()
我已经从Websockets搬走了,以便修复这个问题。我会试试你的建议,然后回来。谢谢
GET /sample/monitor controllers.sample.Connection.monitor()