2017-12-09 17 views
0

私はクライアント - >サーバー& WebSocketでサーバー - クライアントからオブジェクトを送信しようとしています。 JSONを読み取れませんでした:アウトjava.lang.Stringでのインスタンスをデシリアライズすることはできませんクライアント - >サーバが正常に動作し、一方サーバ - >クライアントからオブジェクトを送信すると、例外はwebsocket経由でオブジェクトを送信することはできません

org.springframework.messaging.converter.MessageConversionExceptionを投げますここでSTART_OBJECTのトークン

は私が

@Data 
@AllArgsConstructor 
@NoArgsConstructor 
    public class TextMessage { 
    private String sender; 
    private String room; 
    private String message; 
} 

を送信しようとしているクラスであり、これは、クライアント側

上のコードであります
public class TelepatiClient { 
    public static void main(String[] args) { 
     WebSocketClient client = new StandardWebSocketClient(); 
     WebSocketStompClient stompClient = new WebSocketStompClient(client); 
     stompClient.setMessageConverter(new MappingJackson2MessageConverter()); 
     stompClient.setTaskScheduler(new ConcurrentTaskScheduler()); 
     String url = "ws://localhost:8000/connect"; 
     StompSessionHandler handler = new TelepatiSessionHandler(); 
     stompClient.connect(url, handler); 
     new Scanner(System.in).nextLine(); 
    } 
} 

public class TelepatiSessionHandler extends StompSessionHandlerAdapter { 
    @Override 
    public void afterConnected(StompSession session, StompHeaders connectedHeaders) { 
     session.subscribe("/room/global", this); 
     session.send("/test", new TextMessage("test", "test", "test")); 
    } 
    @Override 
    public void handleFrame(StompHeaders headers, Object payload) { 
     System.out.println(payload.toString()); 
    } 
    @Override 
    public void handleException(StompSession session, StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) { 
     exception.printStackTrace(); 
     super.handleException(session, command, headers, payload, exception); 
    } 
} 

、これは私がのSystem.out.printlnを実行することができた

@Controller 
public class TelepatiController { 
    @MessageMapping("/test") 
    @SendTo("/room/global") 
    public TextMessage getMessage(TextMessage message) { 
     System.out.println("get message :" + message.toString()); 
     return new TextMessage("test2", "test2", "test2"); 
    } 
} 

は( "メッセージを取得する:" + message.toString())サーバー側のメッセージコントローラです。が返されますが、新しいテキストメッセージ( "test2"、 "test2"、 "test2")を返すときは、クライアント側でメッセージ変換例外が発生します。;。以前のテストから、Stringオブジェクトを返すとうまくいきます。なぜTextMessageオブジェクトが返ってきていないのですか?どのように私は任意のオブジェクト(この場合TextMessage)をserver-> clientから送ることができますか?ありがとう!

答えて

1

問題は内容です。この行には、

stompClient.setMessageConverter(new MappingJackson2MessageConverter()); 

クライアントはjsonコンバータを使用していることを示します。したがって、クライアントは常にJSONオブジェクトを期待しています。

しかし、あなたのテストでは、この行に:

return new TextMessage("test2", "test2", "test2"); 

あなたはプレーンテキストを送信しています。テキスト平野におけるメッセージはJSONオブジェクトではありませんのでStompClientは例外

org.springframework.messaging.converter.MessageConversionException

スローされます。

関連する問題