SparkJava使用Kotlin和WebSockets

时间:2017-06-20 20:17:44

标签: websocket kotlin spark-java

我正在使用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网站上的教程。

1 个答案:

答案 0 :(得分:3)

closedorg.eclipse.jetty.websocket.common.events.annotated.CallableMethod类深度调用期间出现错误,并显示以下消息:

  

指定为非null的参数为null:method   webchat.WSHandler.closed,参数原因

它与Kotlin的可空性功能有关,当您使用下面的签名声明您的方法时,一切正常:

fun closed(session: Session, statusCode: Int, reason: String?)