SparkJava使用Kotlin和WebSockets

我正在用SparkJava尝试Kotlin,并且无法实现WebSocket路由。 我正在尝试遵循SparkJava网站( http://sparkjava.com/tutorials/websocket-chat )上提供的WebSocket示例,同时我可以使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网站上的教程。

在调用org.eclipse.jetty.websocket.common.events.annotated.CallableMethod类中的深层方法时出现错误,并显示以下消息:

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

这与Kotlin的可空性特性有关,当你用下面的签名声明你的方法时,所有的工作都很好:

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