Решено - Как настроить HTTP-ответ на запрос обновления WebSocket в Spring? - PullRequest
3 голосов
/ 05 марта 2020

У меня есть конечная точка WebSocket, настроенная так в моей реализации WebSocketConfigurer

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new ExceptionWebSocketHandlerDecorator(myWebSocketHandler), "/ws/")
                .setAllowedOrigins("*")
                .addInterceptors(myHandshakeInterceptor);
    }

В myWebSocketHandler#beforeHandshake есть несколько проверок, и я хотел бы отправить сообщение об ошибке пользователю в случае, если сервер решает отказаться от обновления соединения. Я пробовал это

response.setStatusCode(HttpStatus.BAD_GATEWAY);
try {
    response.getBody().write("Error".getBytes());
    response.getBody().flush();
} catch (IOException e) {
    log.error("Error writing response", e);
}
return false;

Код состояния работает, но тело пусто. Как я могу отправить его?

РЕДАКТИРОВАТЬ: оказывается, проблема в том, что я использовал консоль Firefox, чтобы проверить ответ, и он ничего не показал мне. Если я использую cURL для того же запроса, то все работает нормально, и я вижу сообщение, которое пишу в тело ответа!

1 Ответ

0 голосов
/ 22 апреля 2020

Для обновления тела ответа вам нужно написать свой собственный RequestUpateStrategy. Начиная с официальной документации Spring от AbstractHandshakeHandler говорится, что:

The actual upgrade is delegated to a server-specific RequestUpgradeStrategy, which will update the response as necessary and initialize the WebSocket.

Если вы используете Tomcat в качестве контейнера сервлета, вы можете расширить класс TomcatRequestUpgradeStrategy и предоставить свой собственный logi c, как обрабатывать обновление websocket.

Для каждого контейнера сервлета есть реализация RequestUpgradeStrategy документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...