当前位置: 首页 > 知识库问答 >
问题:

Spring 4 WebSocket动态消息映射未执行

公冶光亮
2023-03-14

我在Tomcat 8上使用Spring 4 WebSocket,我有以下配置:

<websocket:message-broker application-destination-prefix="/app">
    <websocket:stomp-endpoint path="/notify">
        <websocket:sockjs />
    </websocket:stomp-endpoint>
    <websocket:simple-broker prefix="/topic" />
</websocket:message-broker>

我的Spring控制器具有以下方法:

@MessageMapping("/notify/{client}")
public void pushMessage(@DestinationVariable long client, String message) {
    System.out.println("Send " + message + " to " + client);
    template.convertAndSend("/topic/push/" + client, message);
}

所以我在这里尝试做的是,如果客户端1想要向客户端2发送消息,他将使用/app/通知/2。然后,Spring控制器将消息推送到主题/主题/推送/2

我在客户端中编写了以下代码:

var id = 1;
var sock = new SockJS('/project/notify');
var client = Stomp.over(sock);
client.connect({}, function() {
    client.subscribe('/topic/push/' + id, function(message) {
        console.log(message);
    });
});

连接工作正常,/project只是我的应用程序的上下文根。

我的客户端中还有以下代码用于发送消息:

client.send('/app/notify/' + id, {}, "test");

两个变量(客户端id)都是可访问的,我没有从这部分代码中得到任何错误,我可以在我的控制台中看到消息实际上是发送的:

>>> SEND
destination:/app/notify/1
content-length:4

test 

但是,系统。出来println()语句在我的控制器中从未执行过,因此我假设控制器映射有问题,或者我没有正确使用目标endpoint(我不明白为什么我必须在这里指定应用程序前缀,但在连接到该endpoint时却不必指定)。

共有1个答案

牧梓
2023-03-14

当使用简单的字符串消息作为有效负载时,它似乎无法映射。当我将消息包装到一个对象中时,它就可以正常工作了。

编辑:如评论中所述,Spring已经提供了一个名为TextMessage类的消息包装器。

 类似资料:
  • 前端将这个json发送到我的API 控制器:

  • 我对来自JMSMessageProperties类的“”头有问题,或者在我看来是这样,它导致了以下错误 我知道这是由于类中的变量造成的,下面的方法对此负责 和类ich捕获并将其记录为WARN 我知道这只是一个警告,但是我们希望保持日志干净,所以我们的想法是不要记录这个特定的WARN或尝试不传递。我已经基于创建了一个自定义映射器并使用它,但是正如你在starckTrace中看到的,默认映射器仍在使用

  • 我遵循Microsoft的指导,通过Azure ADB2C启用Dynamics Portal访问。基础设施已经启动并运行良好。我使用的是"登录"政策。但是,我在声明映射功能上遇到了麻烦。 我已经根据下面链接的文档中的说明配置了以下站点设置。 身份验证/OpenIdConnect/B2C/RegistrationClaimsMapping身份验证/OpenIdConnect/B2C/LoginCla

  • 我有一个包含240个项目的列表,使用完整发送此列表需要1个多小时。 所以我跟着这篇文章同时发送,以尽量减少响应时间,但是里面的代码永远不会执行:

  • 问题内容: 我一直在研究一个非常简单的JPA示例,并试图将其调整为现有数据库。但是我无法克服这个错误。(下面。)这只是我没看到的一些简单的事情。 在下面的DocumentManager类中(一个简单的servlet,因为这是我的目标),它做了两件事: 插入一行 返回所有行 插入效果很好-一切都很好。问题出在检索上。我尝试了各种参数值,但没有走运,并且尝试了各种更复杂的类注释(如列类型),但都没有成

  • 当我尝试通过枚举将源中的字符串映射到目标中的整数时。ModelMapper失败。 来源 目的地 字符串和整数之间的映射在枚举中定义