首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MessageMapping处理程序-没有匹配方法

MessageMapping处理程序-没有匹配方法
EN

Stack Overflow用户
提问于 2015-08-11 11:08:04
回答 1查看 1.8K关注 0票数 2

我有一个Spring @Controller类,它有一个@MessageMapping注释的方法,如下所示:

代码语言:javascript
运行
复制
@MessageMapping("/trade")
public void executeTrade(MarketOrderRequest trade, Principal principal) {
    trade.setUserID(principal.getName());
    logger.debug("Trade: " + trade);
    this.tradeService.executeTrade(trade);
}

我正在发送使用服务器方法接受的相同MarketOrderRequest POJO构建的JSON消息。使用一些键:值对设置为null (但仍然存在)。

WebSocketConfig类配置了以下端点:

代码语言:javascript
运行
复制
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/queue/", "/topic/");
    registry.setApplicationDestinationPrefixes("/app");
}

当我试图使用以下代码向消息映射发送消息时:

代码语言:javascript
运行
复制
MarketOrderRequest request =  new MarketOrderRequest();
//{set request variables..}
StompHeaders someHeaders = new StompHeaders();
someHeaders.putAll(sessionHeaders);
someHeaders.setDestination("/app/trade");
session.send(someHeaders, request);

带有标题:

代码语言:javascript
运行
复制
{Cookie=[JSESSIONID=8421F536B639126F84F12E655375D790; Path=/spring-websocket-portfolio/; HttpOnly], version=[1.2], heart-beat=[0,0], user-name=[fabrice], destination=[/app/trade]}

然后,服务器打印无法为请求找到方法:

代码语言:javascript
运行
复制
Searching methods to handle SEND /app/trade session=397da625042343b4bac1c913b6d8ec22 application/json;charset=UTF-8 
payload={"uuid":null,"symbol":"EUR/USD","price":1.10182,"side":"1","qty":50000,"quoteID"...(truncated)
WebSocketAnnotationMethodMessageHandler[DEBUG] - No matching methods.

服务器代码从该项目中删除,并作了一些修改,以满足我的需要:链接

我在实现类中添加了一些基于角色的web套接字安全性,如下所示:

代码语言:javascript
运行
复制
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
    messages
            .nullDestMatcher().authenticated()
            .simpSubscribeDestMatchers("/user/queue/errors").permitAll()
            .simpDestMatchers("/app/**").hasAnyRole("roleA", "roleB", "roleC")
            //{some more subscribe dest matchers by role which are working}
}

这可能会影响WebSocketAnnotationMethodMessageHandler映射请求的尝试吗?这几乎是我对配置所做的唯一更改。我的订阅映射工作得很好。

在我看来,由于JSON或主体参数,查找方法似乎存在问题。我正在发送正确的对象类型,所以这可能是用户主体的问题吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-13 13:38:17

我的WebSocketConfig类中有一个错误。

@componentscan注释有错误的包名。我将名称更新为正确的值(基本包的名称,如"com.my.project“)。现在,在日志中部署期间,我可以看到控制器资源正在映射到类中的方法。

例如一种方法的日志输出:

将"{/order,messageType=MESSAGE}“映射到公共无效messageType=MESSAGE java.security.Principal)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31940129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档