Что я хочу иметь:
- Клиент отправляет
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-клиент (браузер), он отвечает Can "Upgrade" only to "WebSocket".
Можно ли как-то заменить эту страницу с ошибкой на мое сопоставление MVC? Любые другие конфигурации, чтобы сделать то, что я описал первым?