- klient wysyła
GET/HTTP/1.1
(bezConnection: upgrade
) - wniosek ten powinien być traktowany przezRequestMappingHandlerMapping
- klient wysyła
Connection: upgrade
wzdłuż z żądaniem GET - to żądanie powinno być obsługiwane przez:ServletWebSocketHandlerRegistry
Moja konfiguracja 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("*");
}
}
Mój kontroler webmvc:
@Controller
public class Status {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String status() {
return "OK";
}
}
Problem polega na tym - kiedy kontroler MVC biorąc pierwszeństwo, zawsze odpowie HTTP 200, websocket obsługi nigdy nie osiągnął. Kiedy program obsługi WebSocket ma pierwszeństwo - działa z klientem WebSocket, ale kiedy próbuję klienta HTTP (przeglądarka), odpowiada: Can "Upgrade" only to "WebSocket".
Czy jest możliwe zastąpienie w jakiś sposób tej strony błędu z powrotem do mojego mapowania MVC? Jakieś inne konfiguracje, aby najpierw to, co napisałem?
Czy jesteś pewien, że mapowania żądań Spring MVC mają mniejszy priorytet niż mapowania WebSocket? Na przykład, czy możesz otworzyć połączenie z gniazdem sieciowym na serwerze ws: // localhost: 8080/status'? –
@AliDehghani pewnie, połączenie z siecią działa, zwykłe połączenie http nie działa z: 00:30:20 BŁĄD Uścisk dłoni nie powiódł się z powodu nieprawidłowego nagłówka aktualizacji: null – vitalyster
Wygląda na to, że twój "WebSocketHandlerMapping' ma wyższy priorytet niż twój" RequestMappingHandlerMapping ". Zwykle jest na odwrót. Opublikuj więcej informacji na temat swoich konfiguracji –