我正在尝试使用SparkJava进行Kotlin,并且在实现WebSockets路由时遇到了麻烦。我正在尝试遵循SparkJava网站(http://sparkjava.com/tutorials/websocket-chat)上可用的WebSockets示例,尽管我可以使OnWebSocketConnect和OnWebSocketMessage元素正常工作,但并未选择OnWebSocketClose。
我已经在Java中实现了此功能,以再次检查它是否不是浏览器问题,并且Java实现工作正常...因此,这似乎是Kotlin解释OnWebSocketClose批注的方式所特有的。
我的代码如下所示
import spark.Spark.*
import org.eclipse.jetty.websocket.api.Session
import org.eclipse.jetty.websocket.api.annotations.*;
fun main(args: Array<String>) {
staticFileLocation("/public")
webSocket("/chat", WSHandler::class.java)
init()
}
@WebSocket
class WSHandler {
@OnWebSocketConnect
fun connected(session: Session) = println("session connected")
@OnWebSocketClose
fun closed(session: Session, statusCode: Int, reason: String) = println("closed sessions")
@OnWebSocketMessage
fun message(session: Session, message: String) = println("Got: $message")
}
html / javascript等均根据SparkJava网站上的教程进行。
最佳答案
在closed
类深处调用org.eclipse.jetty.websocket.common.events.annotated.CallableMethod
方法时,出现以下错误:
它与Kotlin的可空性功能有关,当您使用以下签名声明方法时,所有功能都可以正常工作:
fun closed(session: Session, statusCode: Int, reason: String?)