我想要什么:
- 客户端发送
GET / HTTP/1.1
(不含Connection: upgrade
)- 这个请求应该由RequestMappingHandlerMapping
处理 - 客户端发送带有
Connection: upgrade
的 GET 请求 - 这个请求应该由ServletWebSocketHandlerRegistry
处理
我的 Java 配置:
@Configuration
@EnableWebSocket
public class WebsocketConfiguration extends WebMvcConfigurationSupport
implements WebSocketConfigurer {
@Bean
WebsocketComponent wsHandler() {
return new WebsocketComponent();
}
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(wsHandler(), "/").setAllowedOrigins("*");
}
}
我的WebMVC控制器:
@Controller
public class Status {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String status() {
return "OK";
}
}
问题在于 - 当MVC控制器优先时,它总是响应HTTP 200,并且WebSocket处理程序永远不会被触发。当WebSocket处理程序优先时 - 它可以与WebSocket客户端一起工作,但是当我尝试使用HTTP客户端(浏览器)时,它会响应只能将“Upgrade”升级为“WebSocket”
的错误消息。
有没有可能用什么方式将此错误页面替换为回退到我的MVC映射?还有其他配置可以实现我上述所描述的内容吗?
ws://localhost:8080/status
上打开一个WebSocket连接吗? - Ali DehghaniWebSocketHandlerMapping
比你的RequestMappingHandlerMapping
更有优先级。通常情况下是相反的,请更多地发布关于你的配置的内容。 - Ali DehghaniRequestMappingHandlerMapping
优先时,根本没有回退的位置,请参见更新的问题。 - vitalyster