Я разрабатываю приложение Spring с веб-сокетами.Недавно я выполнил задачу поддержки нескольких конечных точек в моем приложении.Я регистрирую свои конечные точки, скажем:
registry.addEndpoint("/api/v1", "/api/v2")
И мне бы хотелось, чтобы у обеих конечных точек был метод с одинаковым подчиненным маршрутом, но разной реализацией.
Когда у меня есть одна конечная точка веб-сокета, я просто добавляю метод,помечены @MessageMapping("route")
для моего контроллера покоя.Теперь я попытался создать 2 новых контроллера специально для методов websocket, я создал 2 java-класса и аннотировал их как @RequestMapping("/api/v1")
и @RequestMapping("/api/v2")
соответственно, создавая метод внутри каждого из них
@MessageMapping("route")
public void foo() {
log.debug("foo %version% called"); // v1 or v2
}
Но в таком случаеSpring не запускает приложение, из-за неоднозначного отображения и выдает исключение при запуске.
Я также пытался получить доступ к полному маршруту внутри метода, но не могу найти способ сделать это (я попытался взглянуть на MessageHeaders
).
Также в моем приложении есть реализация ApplicationListener
:
WebSocketListener implements ApplicationListener<AbstractSubProtocolEvent>
для перехвата событий подписки Stomp и отключений, но здесь также нет полной информации о маршруте.
Итак, как я могу добиться такого поведения: разные методы для разных подчиненных маршрутов, но одинаковые сопоставления с топами?