报错信息如下所示:
java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1228)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textStart(WsRemoteEndpointImplBase.java:1191)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:190)
at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
错误的方式:
@OnMessage
public String pushMessage(String message, Session session) {
/*代码*/
return message;
}
正确的方式:
@OnMessage
public void pushMessage(String message, Session session) {
/*代码*/
}
原因分析:
@OnMessage
注解的方法表示消息事件,通过该注解的方法上有一个额外的选项:方法可以返回类型或者返回为空。当使用@OnMessage
注解的方法有返回类型时,WebSocket
实现立即将返回值作为消息返回给刚刚在方法中处理的消息的发送者,这在我们需要设计一个应用显式确认收到WebSocket
消息的特殊情况下是有用的。其余情况应该使用void
,即返回为空。