首页 > 解决方案 > 如何使用okhttp3 Websocket调用spring boot MessageMapping

问题描述

我已经创建了一个 Spring Boot Messaging 端点,需要创建一个 android 聊天应用程序,我想知道如何使用 okttp Websocket 客户端来调用这些端点,而 okttp Websocket 客户端似乎没有办法像这个 javascript 代码一样添加 api 端点。

在此处输入图像描述

这是我的春季启动端点

@Configuration
@EnableWebSocketMessageBroker
public class WebMessageConfig implements WebSocketMessageBrokerConfigurer {


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

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {

        registry
                .addEndpoint("/ws")
                 .withSockJS()
                .setAllowedOrigins("*");

    }
    
    }

这是我的 OkHttp 客户端代码

公共类 StompWs {

private String SERVER_PATH="ws://mydomain.com:8443/MyContex/ws";
public static void main(String[] args)  {
    try {
        new StompWs().run();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
private WebSocket webSocket;
public void run() throws Exception {

       OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(SERVER_PATH).build();
        webSocket = client.newWebSocket(request, new SocketListener());
       
}
 
private String getData()
{
    MessageModel message=new MessageModel();
    message.setMessage("Hello");
    message.setRecipientId("1");
    message.setSenderId("2");
    
    
    return new Gson().toJson(message);
}
      private class SocketListener extends WebSocketListener {

            @Override
            public void onOpen(WebSocket webSocket, Response response) {
                super.onOpen(webSocket, response);
       

                try {
                   webSocket.send(getData());
                   /**I need equivalent of this
                   
                   stompClient.subscribe(
      "/user/1/queue/messages",// I need java code to do this
      onMessageReceived
                   */
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                System.out.println("succesfully connected:"+response.toString());//this message execute well
                
              

            }

            @Override
            public void onMessage(WebSocket webSocket, String text) {
                super.onMessage(webSocket, text);

              System.out.println("on message:"+text);
            }
            
            @Override
            public void onFailure(WebSocket webSocket, Throwable t,
                Response response) {
            // TODO Auto-generated method stub
            super.onFailure(webSocket, t, response);
            System.out.println("on message:"+t.toString());
            }
        }
}   

标签: javaspring-bootokhttp

解决方案


推荐阅读