不能使用返回 play.mvc.WebSocket 的方法作为 Play 中请求的处理程序?

Posted

技术标签:

【中文标题】不能使用返回 play.mvc.WebSocket 的方法作为 Play 中请求的处理程序?【英文标题】:Cannot use a method returning play.mvc.WebSocket as a Handler for requests in Play? 【发布时间】:2017-03-22 22:01:58 【问题描述】:
GET    /status        controllers.Application.handleWebSocketConnection()

这里是相关的源代码。

public WebSocket handleWebSocketConnection() 
    return WebSocket.withActor(new F.Function<ActorRef, Props>() 
        @Override
        public Props apply(ActorRef actorRef) throws Throwable 
            return UserActor.props(actorRef, "");
        
    );

这是我的 build.sbt

import play.routes.compiler.InjectedRoutesGenerator
import play.sbt.PlayScala

name := "hello"

version := "1.0"

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

scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  jdbc ,
  cache ,
  ws   ,
  specs2 % Test,
  "io.netty" % "netty-all" % "4.0.0"
)

unmanagedResourceDirectories in Test <+=  baseDirectory ( _ /"target/web/public/test" )  

resolvers ++= Seq(
  "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"
)

routesGenerator := InjectedRoutesGenerator

fork in run := true

我使用的是 Play 版本 2.4.2,所有源代码都在 java 8 中。我收到以下错误。我不确定我的路线和控制器发生了什么。我在这里关注了link。

[error] /Users/hello/Documents/java/test_app/conf/routes:8: Cannot use a method returning play.mvc.WebSocket[?0] as a Handler for requests

[error] GET    /status       controllers.Application.handleWebSocketConnection()        

[error] /Users/hello/Documents/java/test_app/conf/routes:8: not enough arguments for method createInvoker: (implicit hif: play.core.routing.HandlerInvokerFactory[play.mvc.WebSocket[?0]])play.core.routing.HandlerInvoker[play.mvc.WebSocket[?0]].

[error] two errors found


[error] (compile:compile) Compilation failed

有什么想法吗?

【问题讨论】:

【参考方案1】:

我没有添加评论所需的代表...所以我们开始吧:

我想知道指定 websocket 处理的消息类型是否可以解决问题,试试:

public WebSocket<String> handleWebSocketConnection()

这当然是假设您的 websocket 期望从浏览器传入的字符串以及返回的字符串。

【讨论】:

以上是关于不能使用返回 play.mvc.WebSocket 的方法作为 Play 中请求的处理程序?的主要内容,如果未能解决你的问题,请参考以下文章

不能使用带有返回 void 类型提示的箭头函数

为啥 vsql 可以返回所有记录,而使用 ODBC 驱动程序不能?

奇怪的 PHP 错误:'不能在写上下文中使用函数返回值'

TSQL 错误:不能在此上下文中使用具有返回值的 RETURN 语句

MySQL - GROUP_CONCAT 返回重复数据,不能使用 DISTINCT

我不能使用从 promise 返回的值