Spring Boot WebSocket路径参数提取分析
这段代码在WebSocket握手前执行,用于:验证连接路径是否符合预期格式从URL路径中提取请求ID(如request123将提取的requestId存入attributes,供后续WebSocket会话使用这种模式常用于REST风格的WebSocket端点,通过URL路径传递参数而不是查询参数。
我来详细分析这段Java WebSocket握手拦截代码:
1. Pattern.compile("/ws/print/progress/([^/]+)") 的含义
这是一个正则表达式,用于匹配和提取WebSocket连接路径中的参数:
-
/ws/print/progress/- 固定的路径前缀 -
([^/]+)- 捕获组,匹配一个或多个非斜杠字符-
[^/]- 匹配任何不是斜杠的字符 -
+- 表示一个或多个 -
括号
()表示这是一个捕获组,可以被后续提取
-
示例匹配:
-
/ws/print/progress/123→ 匹配,提取"123" -
/ws/print/progress/abc-xyz→ 匹配,提取"abc-xyz" -
/ws/print/progress/123/→ 不匹配(末尾有斜杠) -
/ws/print/progress/→ 不匹配(缺少参数)
2. matcher.group(1) 参数为1的原因
在正则表达式中,group(0) 返回整个匹配的字符串,而 group(1) 返回第一个捕获组的内容:
java
// 假设路径是:/ws/print/progress/request123 matcher.group(0) // 返回 "/ws/print/progress/request123"(整个匹配) matcher.group(1) // 返回 "request123"(第一个捕获组)
分组编号规则:
-
group(0)- 整个正则表达式匹配的内容 -
group(1)- 第一个括号捕获组的内容 -
group(2)- 第二个括号捕获组的内容(如果有的话)
代码功能总结
这段代码在WebSocket握手前执行,用于:
-
验证连接路径是否符合预期格式
-
从URL路径中提取请求ID(如
request123) -
将提取的requestId存入attributes,供后续WebSocket会话使用
这种模式常用于REST风格的WebSocket端点,通过URL路径传递参数而不是查询参数。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)