Spring 4 MVC 和 Websockets - 没有合适的默认请求升级策略



我需要Websockets在我的应用程序中进行实时更新。所以我找到了这个例子,并在这里一步一步地做了。我浏览了本教程,最后在启动应用程序时出现此异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name

'org.springframework.web.socket.server.support.DefaultHandshakeHandler#0':Bean 实例化失败;嵌套异常是org.springframework.beans.BeanInstanceiationException: 不能实例化 Bean 类[org.springframework.web.socket.server.support.DefaultHandshakeHandler]:构造函数抛出异常;嵌套异常是java.lang.IllegalStateException: 没有合适的默认值找到请求升级策略

我搜索了很多,但没有找到解决方案。

我希望有人能帮助我,提前谢谢。

最好的问候,帕特里克

我设法通过添加以下 maven 依赖项来解决此问题:

<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-websocket</artifactId>
   <version>7.0.52</version>
</dependency>

正如 Craig Otis 所指出的,如果你打算部署到 Tomcat,你应该使用 <scope>test</scope> 来确保你不会在构建工件中包含依赖项。

我在使用嵌入式 Jetty 在 IDE 中运行 websocket 时遇到了这个问题,在将以下依赖项添加到 pom 后修复了此问题.xml

            <dependency>
                <groupId>org.eclipse.jetty.websocket</groupId>
                <artifactId>websocket-client</artifactId>
                <version>9.3.4.RC0</version>
                <!--<scope>test</scope>-->
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty.websocket</groupId>
                <artifactId>websocket-server</artifactId>
                <version>9.3.4.RC0</version>
                <!--<scope>test</scope>-->
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-client</artifactId>
                <version>9.3.4.RC0</version>
                <!--<scope>test</scope>-->
            </dependency>

我浪费了很多时间来寻找解决方案,我发现Spring websocket只能运行在Tomcat 7.0.47+,Jetty 9.1+,GlassFish 4.1+,WebLogic 12.1.3+和Undertow 1.0+(和WildFly 8.0+)上,根据这里显示的spring文档。http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html,因此请尝试更新应用服务器

您使用的 Tomcat 版本太旧。

升级雄猫。 http://tomcat.apache.org/download-70.cgi

我也遇到了这个问题,通过一个链接查看这是否有帮助 https://github.com/rstoyanchev/spring-websocket-portfolio/issues/21

异常意味着 DefaultHandshakeHandler 找不到支持的服务器(例如 Tomcat 7 和 8、Jetty 9)。请参阅此处的 javadoc。

此外,

如果您使用的是 gradle,您应该在 build.gradle 中添加以下依赖项

compile 'org.projectreactor:reactor-spring:1.0.1.RELEASE'

最新更新