title: how to use and customize MessageConversion(Spring websocket client)
body: <p>I wrote a web socket server and a client with spring. The codes is following. The codes sending message to server work, but the sesssion.subscribe method cannot receive message from the server. I search for many documents and check my codes. I don't why it cannot work.</p>
  
  <p>Here is my client codes:</p>
  
  <pre><code>public class Test {
  
      public static void main(String[] args) {
  
          Thread thread = new Thread(new WebsocketThread());
          thread.start();
          Thread.sleep(5000);
      }
  }
  
  class MyStompSessionHandler extends StompSessionHandlerAdapter {
  
      @Override
      public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
          session.send("/app/messages", "{'payload3':2222}".getBytes());
          session.subscribe("/user/queue/position-updates", new StompFrameHandler() {
  
              @Override
              public Type getPayloadType(StompHeaders headers) {
                  return String.class;
              }
  
              @Override
              public void handleFrame(StompHeaders headers, Object payload) {
                  System.out.println("test:" + payload);
              }
  
          });
      }
  }
  
  class WebsocketThread implements Runnable{
      @Override
      public void run() {
          List&lt;Transport&gt; transports = new ArrayList&lt;&gt;(1);
          transports.add(new WebSocketTransport( new StandardWebSocketClient()) );
          WebSocketClient webSocketClient = new SockJsClient(transports);
          WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
  
          String url = "ws://127.0.0.1:8860/orders";
          StompSessionHandler sessionHandler = new MyStompSessionHandler();
          ListenableFuture&lt;StompSession&gt; future = stompClient.connect(url, sessionHandler);
      }
  }
  </code></pre>
  
  <p>Here is my server codes:</p>
  
  <pre><code>@Controller
  public class TestController {
  
      @Autowired
      private SimpMessagingTemplate simpMessagingTemplate;
  
      @MessageMapping("/messages")
      public void sendUserMsg(String messages) throws IOException {
          System.out.println("webSocket:" + messages);
          simpMessagingTemplate.convertAndSend("/queue/position-updates", "This is return message");
      }
  }
  </code></pre>
  
  <p>It is Exception:</p>
  
  <p>org.springframework.messaging.converter.MessageConversionException: No suitable converter, payloadType=class java.lang.String, handlerType=class com.example.hello.MyStompSessionHandler
      at org.springframework.messaging.simp.stomp.DefaultStompSession.invokeHandler(DefaultStompSession.java:419)
      at org.springframework.messaging.simp.stomp.DefaultStompSession.handleMessage(DefaultStompSession.java:373)
      at org.springframework.web.socket.messaging.WebSocketStompClient$WebSocketTcpConnectionHandlerAdapter.handleMessage(WebSocketStompClient.java:342)
      at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleMessageFrame(AbstractClientSockJsSession.java:267)
      at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleFrame(AbstractClientSockJsSession.java:200)
      at org.springframework.web.socket.sockjs.client.WebSocketTransport$ClientSockJsWebSocketHandler.handleTextMessage(WebSocketTransport.java:162)
      at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43)
      at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:110)
      at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access$000(StandardWebSocketHandlerAdapter.java:42)
      at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81)
      at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:78)
      at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:399)
      at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:500)
      at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:295)
      at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:131)
      at org.apache.tomcat.websocket.WsFrameClient.processSocketRead(WsFrameClient.java:73)
      at org.apache.tomcat.websocket.WsFrameClient.access$300(WsFrameClient.java:31)
      at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:131)
      at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:114)
      at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
      at sun.nio.ch.Invoker$2.run(Invoker.java:218)
      at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)</p>