@当通过WebSocket从Javascript推送消息时,MessageMapping不会触发控制器

@当通过WebSocket从Javascript推送消息时,MessageMapping不会触发控制器,websocket,stomp,sockjs,spring-websocket,Websocket,Stomp,Sockjs,Spring Websocket,我正在尝试使用Spring4.1.1、Stomp2.3.3和SockJS0.3.4进行WebSocket演示 在服务器端: 有一个配置文件 @Configuration @EnableWebSocketMessageBroker public class AppWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessa

我正在尝试使用Spring4.1.1、Stomp2.3.3和SockJS0.3.4进行WebSocket演示

在服务器端: 有一个配置文件

@Configuration
@EnableWebSocketMessageBroker
public class AppWebSocketConfig extends
        AbstractWebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic/");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/hello").withSockJS();
    }
}
是处理消息的控制器

@Controller
public class EBConsoleWebSocketController {

    private static final Logger LOG = Logger
            .getLogger(EBConsoleWebSocketController.class);

    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        LOG.info(message.getName());
        return new Greeting("Hello, " + message.getName() + "!");
    }

    public class HelloMessage implements Serializable {

        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }

    public class Greeting implements Serializable {
        private String content;

        public Greeting(String content) {
            super();
            this.content = content;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

    }
}
问题在于@MessageMapping似乎不会触发问候语方法。

下面是客户端javascript

var stompClient = null;

    function setConnected(connected) {
        document.getElementById('connect').disabled = connected;
        document.getElementById('disconnect').disabled = !connected;
        document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
        document.getElementById('response').innerHTML = '';
    }

    function connect() {
        var socket = new SockJS("<c:url value='/hello'/>");
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function(frame) {
            setConnected(true);
            console.log('Connected: ' + frame);
            stompClient.subscribe('/topic/greetings', function(greeting) {
                showGreeting(JSON.parse(greeting.body).content);
            });
        });
    }

    function disconnect() {
        if (stompClient != null) {
            stompClient.disconnect();
        }
        setConnected(false);
        console.log("Disconnected");
    }

    function sendName() {
        var name = document.getElementById('name').value;
        stompClient.send("/app/hello", {}, JSON.stringify({
            'name' : name
        }));
    }

    function showGreeting(message) {
        var response = document.getElementById('response');
        var p = document.createElement('p');
        p.style.wordWrap = 'break-word';
        p.appendChild(document.createTextNode(message));
        response.appendChild(p);
    }
var stompClient=null;
功能设置已连接(已连接){
document.getElementById('connect')。disabled=connected;
document.getElementById('disconnect')。disabled=!connected;
document.getElementById('conversationDiv')。style.visibility=connected?'visible':'hidden';
document.getElementById('response')。innerHTML='';
}
函数连接(){
var socket=new SockJS(“”);
stompClient=Stomp.over(套接字);
stompClient.connect({},函数(框架){
setConnected(true);
console.log('Connected:'+frame);
stompClient.subscribe('/topic/greetings',函数(greeting){
showGreeting(JSON.parse(greeting.body.content);
});
});
}
功能断开(){
if(stompClient!=null){
stompClient.disconnect();
}
设置连接(假);
控制台日志(“断开”);
}
函数sendName(){
var name=document.getElementById('name')。值;
stompClient.send(“/app/hello”,{},JSON.stringify({
“名称”:名称
}));
}
功能显示问候语(信息){
var response=document.getElementById('response');
var p=document.createElement('p');
p、 style.wordWrap='break word';
p、 appendChild(document.createTextNode(message));
反应。儿童(p);
}

无论如何都应该有一些网络交互。我建议在服务器上为
org.springframework
打开
DEBUG
,并使用嗅探工具查看网络流量。现代浏览器对此有一些插件。我看不到任何关键的东西,除非
,您可以将其更改为真正的ULR进行开发。是的,我同意。显示您的
DispatcherServlet
配置。调试有进展吗?