Переменная пути Spring WebFlux WebSocket

Как я могу получить переменную пути в обработчике веб-сокетов с помощью Spring WebFlux?
Я пробовал это:

@Bean
public HandlerMapping webSocketMapping() {
    Map<String, WebSocketHandler> map = new HashMap<>();
    map.put("/path/{id}", session -> session.send(Mono.just(session.textMessage("123"))));
    SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
    mapping.setUrlMap(map);
    mapping.setOrder(-1);
    return mapping;
}

Но сессия не имеет никакой информации о параметрах URL.
Возможно ли это?


person Slava    schedule 27.02.2018    source источник


Ответы (1)


Это требует некоторого литья, но это возможно.

private URI getConnectionUri(WebSocketSession session) {
    ReactorNettyWebSocketSession nettySession = (ReactorNettyWebSocketSession) session;
    return  nettySession.getHandshakeInfo().getUri();
  }

Получив URI, используйте Spring UriTemplate для получения переменных пути.

// This can go in a static final 
UriTemplate template = new UriTemplate("/todos/{todoId}");
Map<String, String> parameters = template.match(uri.getPath());
String todoId = parameters.get("todoId");
person Mike    schedule 18.01.2019
comment
Это дает вам только URI, а не проанализированную переменную пути идентификатора - person Slavus; 24.01.2019