已解决 - 如何为 Spring 中的 WebSocket 升级请求自定义 HTTP 响应?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已解决 - 如何为 Spring 中的 WebSocket 升级请求自定义 HTTP 响应?相关的知识,希望对你有一定的参考价值。
我有一个WebSocket端点,在我的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;
状态码可以用,但正文是空的。怎么发啊?
EDIT:原来问题是我用Firefox控制台检查响应,它没有给我任何显示。如果我使用cURL进行同样的请求,那么一切都能正常工作,我看到了我写到响应体的消息!我有一个WebSocket端点。
要更新响应体,你需要写你的自定义RequestUpateStrategy.As从spring官方文档中的AbstractHandshakeHandler说。
The actual upgrade is delegated to a server-specific RequestUpgradeStrategy, which will update the response as necessary and initialize the WebSocket.
如果你使用Tomcat作为servlet容器,你可以扩展 TomcatRequestUpgradeStrategy类并提供你自己的逻辑如何处理websocket升级。
对于每个servlet容器都有RequestUpgradeStrategy的实现。文件
以上是关于已解决 - 如何为 Spring 中的 WebSocket 升级请求自定义 HTTP 响应?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 ZuulException 自定义 Spring Boot 控制器 API 响应
如何为 Spring Data 中的类配置 MongoDb 集合名称
如何为 Meteor 中的输入控件指示“已选中”或“已选择”状态(使用空格键模板)?