与最新的使用STOMP和SockJS的Spring 4教程一样,我们发现了以下类型的RequestMapping:
Homecontroller.java
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(3000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}
现在我尝试通过修改此请求映射来实现多渠道支持:
@MessageMapping("/hello/{id}")
@SendTo("/topic/greetings/{id}")
public Greeting greetingMultichannel(HelloMessage message) throws Exception {
this.info();
Thread.sleep(300); // simulated delay
return new Greeting(" Hello, " + message.getName() + "!");
}
MessageMapping不起作用,sendTo不会传回指定的URL。 的虽然 我确实订阅了正确的频道,消息没有出现问题,如本
所示调试日志:
打开Web Socket ... stomp.js:130 Web Socket打开... stomp.js:130
CONNECT 接受版本:1.1,1.0 心脏搏动:10000,10000
stomp.js:130 <<<连接的 心脏搏动:0,0 版本:1.1
stomp.js:130 连接到服务器undefined stomp.js:130 已连接:已连接 版本:1.1 心脏搏动:0,0
(索引):23
SUBSCRIBE ID:分0 目的地:/主题/问候/ 1
stomp.js:130
SEND 目的地:/应用/你好/ 1 内容长度:18
{“name”:“textext”}
应该有回应,但没有任何回复......
有人能看到我在这里失踪的东西吗?
欢呼声, 海因里希
答案 0 :(得分:4)
目前无法将参数传递给@SendTo
/ @SendToUser
,@MessageMapping
上的占位符在@SendTo
/ @SendToUser
中不可用。对此有一个open Jira,请密切关注它。
在此期间,请使用SimpMessagingTemplate
:
@Autowired
private SimpMessagingTemplate simpMessagingTemplate;
@MessageMapping("/hello/{id}")
public void greetingMultichannel(HelloMessage message, @DestinationVariable("id") Long id) throws Exception {
this.info();
Thread.sleep(300); // simulated delay
simpMessagingTemplate.convertAndSend("/topic/greetings/" + id, new Greeting(" Hello, " + message.getName() + "!"));
}
2015年9月8日更新:
从Spring 4.2开始,目标变量占位符可以在@SendTo / @SendToUser
中使用。现在可以:
@MessageMapping("/hello/{id}")
@SendTo("/topic/greetings/{id}")
public Greeting greetingMultichannel(HelloMessage message) throws Exception {
this.info();
Thread.sleep(300); // simulated delay
return new Greeting(" Hello, " + message.getName() + "!");
}