问题是-当MVC控制器优先时,它总是以HTTP 200响应,WebSocket处理程序从未到达
当RequestMappingHandlerMapping
优先于时WebSocketHandlerMapping
,对于它们都可以处理的对端点的请求(如果仅考虑URL),DispatcherServlet
会将请求分派给@RequestMapping
方法,而不是WebSocket处理程序。为了解决此问题,请限制@RequestMapping
方法只提供不带Connection:Upgrade
标头的请求:
@Controller
public class Status {
@RequestMapping(value = "/", method = GET, headers = "Connection!=Upgrade")
public String status() {
return "OK";
}
}
这样,当DispatcherServlet
搜索该公共端点的处理程序时,它将考虑Connection:Upgrade
标头的存在或不存在,以确定满足请求的正确处理程序。