java - WebSocketAnnotationMethodMessageHandler 没有匹配的方法

标签 java spring websocket stomp

我正在使用 Stomp 编写 WebSocket 客户端,当我使用 Stomp 客户端发送请求时,日志输出为:

15:17:44.688]-[clientInboundChannel-59]-[org.springframework.web.socket.messaging.WebSocketAnnotationMethodMessageHandler]-{Searching methods to handle SEND /app/vehicle session=qnlerizz}
15:17:44.688]-[clientInboundChannel-59]-[org.springframework.web.socket.messaging.WebSocketAnnotationMethodMessageHandler]-{No matching methods.}

这说明客户端没有问题。服务器找不到匹配的 URL 来处理请求。但我已经有一个处理方法。这是代码:

@Controller
@Log4j2
public class WebSocketController {

    public SimpMessagingTemplate template;

    @Autowired
    public WebSocketController(SimpMessagingTemplate template) {
        this.template = template;
    }       

    @MessageMapping("/vehicle")
    @SendTo("/topic/location")
    public void getloc() throws Exception {
        try {
            for (int i = 0; i < 10; i++) {
                template.convertAndSend("/topic/location", "aaaaaaa");
            }
        } catch (Exception e) {
            log.error(e);
        }
    }
}

这是我的网络配置:

public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {           
        config.enableSimpleBroker("/topic");            
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/vehicle").withSockJS();           
    }
}

这是客户端代码:

function connect() {
        var socket = new SockJS('/clbs/vehicle');
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function (frame) {
            setConnected(true);
            console.log('Connected: ' + frame);
            stompClient.subscribe('/topic/location', function (greeting) {
                showGreeting(JSON.parse(greeting.body).content);
            });
        });
    }

stompClient.send("/app/vehicle",{},JSON.stringify("bbb"));

我该怎么办?可能哪里出了问题?

PS: Controller WebSocketController已经自动扫描。

JDK:1.8 Tomcat :8.0.36 Spring :4.2.6

我为这个问题苦苦挣扎了两天。

最佳答案

确保 Controller 自动扫描成功。我遇到这个问题是因为bean没有扫描。所以无法匹配属性方法来处理stomp客户端请求。检查自动扫描配置。搜索历史日志内容,总结详细信息是here .

关于java - WebSocketAnnotationMethodMessageHandler 没有匹配的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40080957/

相关文章:

java - 错误: incompatible types: MainFragment cannot be converted to Activity

java - PHP和Java之间的加密

json - 将 JSON 发布到 REST API

node.js - Google 云应用引擎 1 小时延迟,没有明显的响应时间

android - 当应用程序在后台时,React Native 处理套接字连接的事件?

java - 如何比较两个文件是否相同?

java - java.time 的官方区域名称列表在哪里?

java - Spring继承不起作用

java - spring web service 2.0所需的axiom依赖版本

javascript - 无法与 Amber 或 NPM 建立 websocket 连接,不确定是哪一个