You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Messaging Socket交互中如何区分目的地并为@MessageMapping分配指定前缀

多应用目的地前缀的匹配规则说明

实现WebSocketMessageBrokerConfigurer接口时,configureMessageBroker方法里的setApplicationDestinationPrefixes传入多个前缀的情况下,框架本身会自动做前缀匹配和路由分发,不需要手动给方法绑定特定前缀,具体逻辑如下:

基础匹配规则

setApplicationDestinationPrefixes配置的所有前缀是全局前置匹配规则:只要消息的目的地前缀匹配任意一个配置的值,就会进入@MessageMapping注解的路由匹配流程,框架会自动把匹配到的前缀剥离后,再和@MessageMapping里配置的路径做匹配。

举个配置示例:

public void configureMessageBroker(MessageBrokerRegistry registry) {
    // 配置三个应用级目的地前缀
    registry.setApplicationDestinationPrefixes("/app", "/admin", "/user");
    // 其他消息代理配置省略
}

对应的匹配效果:

  • 发往/app/sendMsg的消息 → 匹配@MessageMapping("/sendMsg")标注的方法
  • 发往/admin/deleteResource的消息 → 匹配@MessageMapping("/deleteResource")标注的方法
  • 发往/user/getProfile的消息 → 匹配@MessageMapping("/getProfile")标注的方法

强制方法绑定特定前缀的实现方案

如果你需要指定某类方法只能响应特定前缀的请求,最常用的实现方式是按前缀拆分控制器类:
在控制器类上添加@MessageMapping注解配置二级路径,把相同前缀的业务方法统一放到同一个控制器类下管理即可。如果需要完全隔离不同前缀的路由,也可以拆分不同的WebSocket端点,分别配置独立的前缀规则。

注意:前缀不会自动拼接到@MessageMapping注解的路径值中,框架处理时会自动剥离匹配到的前缀再做路径匹配


内容的提问来源于stack exchange,提问作者Andrey M. Stepanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:06:02