使用Spring MVC RequestMappingHandlerMapping和Spring Websocket的ServletWebSocketHandlerRegistry处理相同的URL
2022-09-04 03:09:28
我想要什么:
- 客户端发送(不带) - 此请求应由
GET / HTTP/1.1
Connection: upgrade
RequestMappingHandlerMapping
- 客户端随 GET 请求一起发送 - 此请求应由
Connection: upgrade
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客户端(浏览器)时,它会响应为是否可以以某种方式将此错误页面替换为回退到我的MVC映射?是否有任何其他配置可以进行我首先描述的内容?Can "Upgrade" only to "WebSocket".