报错信息如下所示:
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,即返回为空。
本文解析了在WebSocket编程中使用@OnMessage注解时常见的返回类型错误,并提供了正确的实践方式,避免了因方法签名不当导致的非法状态异常。
1110

被折叠的 条评论
为什么被折叠?



