在java中使用websocket报错,主要错误如下。
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-06-28 19:15:23.482 ERROR 9116 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Failed to register @ServerEndpoint class: class com. websocket.RealDataWebSocketServer
错误详情:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-06-28 19:15:23.482 ERROR 9116 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Failed to register @ServerEndpoint class: class com. websocket.RealDataWebSocketServer
at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.java:158) ~[spring-websocket-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoints(ServerEndpointExporter.java:133) ~[spring-websocket-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.web.socket.server.standard.ServerEndpointExporter.afterSingletonsInstantiated(ServerEndpointExporter.java:111) ~[spring-websocket-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) ~[spring-beans-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:548) ~[spring-context-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.0.7.RELEASE.jar:2.0.7.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) [spring-boot-2.0.7.RELEASE.jar:2.0.7.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386) [spring-boot-2.0.7.RELEASE.jar:2.0.7.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-2.0.7.RELEASE.jar:2.0.7.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242) [spring-boot-2.0.7.RELEASE.jar:2.0.7.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230) [spring-boot-2.0.7.RELEASE.jar:2.0.7.RELEASE]
at com. EnergyMonitoringSysApplication.main(EnergyMonitoringSysApplication.java:19) [classes/:na]
Caused by: javax.websocket.DeploymentException: Parameters annotated with @PathParam may only be Strings, Java primitives or a boxed version thereof
at org.apache.tomcat.websocket.pojo.PojoMethodMapping.getPathParams(PojoMethodMapping.java:309) ~[tomcat-embed-websocket-8.5.35.jar:8.5.35]
at org.apache.tomcat.websocket.pojo.PojoMethodMapping.<init>(PojoMethodMapping.java:185) ~[tomcat-embed-websocket-8.5.35.jar:8.5.35]
at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:147) ~[tomcat-embed-websocket-8.5.35.jar:8.5.35]
at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:234) ~[tomcat-embed-websocket-8.5.35.jar:8.5.35]
at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.java:155) ~[spring-websocket-5.0.11.RELEASE.jar:5.0.11.RELEASE]
... 12 common frames omitted
Caused by: java.lang.IllegalArgumentException: Unable to coerce value [0] to type [java.math.BigInteger]. That type is not supported.
at org.apache.tomcat.websocket.Util.coerceToType(Util.java:327) ~[tomcat-embed-websocket-8.5.35.jar:8.5.35]
at org.apache.tomcat.websocket.pojo.PojoMethodMapping.getPathParams(PojoMethodMapping.java:307) ~[tomcat-embed-websocket-8.5.35.jar:8.5.35]
... 16 common frames omitted
我这个问题产生的原因是因为我在websockt类中,使用onopen注解方法的时候,里面设置的参数类型有问题。我因为项目中都是使用的BigInteger,所以给onopen方法也设置了BigInteger参数,导致我报了以上错误。
我的代码,使用下面代码ide不会报错,但是编译的时候会报上面错误。
public void onOpen(Session session, @PathParam("department") BigInteger department) {
最后我改成了Integer,问题解决
public void onOpen(Session session, @PathParam("department") Integer department) {