使用 Spring MVC RequestMappingHandlerMapping 和 Spring Websocket 的 ServletWebSocketHandlerRegistry 处理相同的 URL

2023-12-26

我想要拥有什么:

  • 客户端发送GET / HTTP/1.1(没有Connection: upgrade) - 该请求应由RequestMappingHandlerMapping
  • 客户端发送Connection: upgrade与 GET 请求一起 - 该请求应该由ServletWebSocketHandlerRegistry

我的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("*");
    }
}

我的 webmvc 控制器:

@Controller
public class Status {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String status() {
        return "OK";
    }
}

问题是 - 当 MVC 控制器优先时,它总是以 HTTP 200 响应,WebSocket 处理程序从未到达。当 WebSocket 处理程序具有优先权时 - 它与 WebSocket 客户端一起使用,但是当我尝试 http 客户端(浏览器)时,它会响应Can "Upgrade" only to "WebSocket".是否可以通过回退到我的 MVC 映射来替换此错误页面?还有其他配置可以实现我首先描述的功能吗?


问题是 - 当 MVC 控制器优先时,它总是 使用 HTTP 200 进行响应,WebSocket 处理程序从未到达

When RequestMappingHandlerMapping优先于WebSocketHandlerMapping,对于两者都可以处理的端点的请求(如果您只考虑 URL),DispatcherServlet会将请求发送至@RequestMapping方法,而不是 WebSocket 处理程序。为了解决这个问题,限制@RequestMapping只提供请求的方法,无需Connection:Upgrade header:

@Controller
public class Status {
    @RequestMapping(value = "/", method = GET, headers = "Connection!=Upgrade")
    public String status() {
        return "OK";
    }
}

这样,当DispatcherServlet搜索该公共端点的处理程序,它会考虑是否存在Connection:Upgradeheader 来确定正确的处理程序来满足请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spring MVC RequestMappingHandlerMapping 和 Spring Websocket 的 ServletWebSocketHandlerRegistry 处理相同的 URL 的相关文章

  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 将一个数组拆分为 2 个数组 C#

    编辑 我尝试过 Take Skip 方法 但出现以下错误 Cannot implicitly convert type System Collections Generic IEnumerable
  • 如何设置与爷爷的相对位置!元素?

    我有这样的布局 div class one div class two div class three some text div div div 可以根据祖父元素设置三个相对位置 one 在 CSS 中 看看这个 http jsfiddl
  • Powershell:二维数组

    以下内容按预期工作 values a b c d foreach value in values write host Value 0 value 0 write host Value 1 value 1 结果 1 Value 0 a Va
  • 用Java正则表达式递归替换?

    我可以更换ABC 10 5 with 10 5 using replaceAll ABC 1 2 但我不知道该怎么做ABC ABC 20 2 5 or ABC ABC 30 2 3 2 如果我能够转换为 20 2 5我怎样才能转换回ABC
  • 内省模块类时“#map(&proc)”习惯用法如何工作?

    介绍成语 我找到了一个有趣但无法解释的替代方案 https stackoverflow com a 3680719 1301972到一个被接受的答案 该代码显然可以在 REPL 中运行 例如 module Foo class Bar def
  • 如何在 Spring Boot 中向静态资源添加 Cache-Control 标头?

    我怎样才能添加Cache ControlSpring Boot 中静态资源的 HTTP 标头 尝试在应用程序中使用过滤器组件 它可以正确写入标头 但是Cache Control标头被覆盖 Component public class Cac
  • .NET - 使用类库存储 App.config

    网上似乎有很多人问这个问题 但到目前为止我的研究还没有得出解决方案 而且 至少目前 我还没有接受 这是不可能的 作为解决方案 简而言之 我想要做的就是在 NET 类库项目中拥有一个配置文件 该文件在任何引用该类库的应用程序中都可用 我的设置
  • 我应该为 C 中的 erand48() 使用什么种子值?

    我是 C 编程新手 我读到 erand48 是线程安全随机数生成的一个不错的选择 然而 该函数采用的种子值为 unsigned Short int array 3 关于这个种子值应该初始化为什么有什么建议吗 好吧 首先 让我澄清一下 PRN
  • 使用 PIL 加载 RGBA 位图

    我尝试使用 PIL 将 32 位位图转换为 32 位 PNG from PIL import Image im Image open example bmp print im mode it prints RGB but expected
  • 经过身份验证的播放请求的 parse.json

    我在我的应用程序中设置了身份验证 如下所示 在提供用户名且 API 密钥为 123 时始终允许 object Auth def IsAuthenticated block gt String gt Request AnyContent gt
  • 反序列化时 C# 类中的字段初始值设定项不运行

    我有一个定义受保护字段的类 受保护的字段有一个字段初始值设定项 当我反序列化具体类时 字段初始值设定项不会运行 为什么 解决问题的最佳模式是什么 如果我将初始化移至构造函数中 则也不会调用构造函数 DataContract public c
  • impl Stream 无法取消固定

    我正在尝试使用获取数据crates io api https docs rs crates io api 0 7 0 crates io api 我尝试从流中获取数据 但是 我无法让它工作 AsyncClient all crates ht
  • jQuery 日期选择器显示格式

    我有带有日期字段 yy mm dd 的 MySQL 表 我有带有日期选择器的表单可以对其进行编辑并且工作正常 但在前端日期显示为 mm dd yy 这可能会令人困惑 我希望带有日期选择器的字段将值显示为 mm dd yy 但实际值应该采用旧
  • 将 List 转换为 char[],然后转换为 String

    我尝试过以下方法 List
  • Cuda 内核返回向量

    我有一个单词列表 我的目标是匹配一个非常非常长的短语中的每个单词 我在匹配每个单词时没有问题 我唯一的问题是返回包含每个匹配信息的结构向量 In code typedef struct int A B C Match global void
  • GitHub Pages 网站不会加载除 minima 之外的任何主题

    Versions Windows 10 0 19044 2364ruby 3 1 3p185 2022 11 24 修订版 1a6b16756e x64 mingw ucrt 宝石 v3 3 26杰基尔4 3 1 Problem 我的 Ge
  • Visual Studio 不会编译带有 *.inl 实现的模板类

    我正在关注一本关于 SFML 游戏开发的书 但我被困在第二章 因为我无法编译我刚刚编写的代码 它几乎是从书中逐字复制 除了成员变量名称和异常文本 我有使用 C 和模板的经验 但我以前从未见过这个错误 而且我已经盯着它看了几个小时了 我没有发
  • cv2.waitKey(1) & 0xff == ord('q') 如何工作?

    这条线如何运作 据我所知 到目前为止 输出cv2 waitKey number 对于所有的每一个int数字是 1 and 0xff是一个十六进制数 等于255以十进制数字表示 1 0xff等于255以十进制数字表示 Also ord q 等
  • 在后台线程上构建 UIView

    我知道 UI 应该只在主线程上更新 但是是否可以在单独的线程上创建和添加子视图 只要它们不添加到可见视图中 会导致内存和性能问题吗 这是一些示例代码 NSOperationQueue queue NSOperationQueue alloc
  • 使用 Spring MVC RequestMappingHandlerMapping 和 Spring Websocket 的 ServletWebSocketHandlerRegistry 处理相同的 URL

    我想要拥有什么 客户端发送GET HTTP 1 1 没有Connection upgrade 该请求应由RequestMappingHandlerMapping 客户端发送Connection upgrade与 GET 请求一起 该请求应该