2017-03-03 10 views
0

私はSpring WebSocketsを使用しています。うまくいきましたが、メッセージをWebクライアントに送信する前にメッセージを変更する必要がある場合があります。Stompインターセプタが動作しない

は、そのため私は、次のインターセプタを作成:

@Component 
public class StompMappingInterceptor extends ChannelInterceptorAdapter { 

    @Override 
    public Message<?> preSend(Message<?> message, MessageChannel channel) { 
     message = MessageBuilder.withPayload(modifyMessage(message)) 
       .copyHeaders(message.getHeaders()) 
       .build(); 
     return message; 
    ... 
} 

modifyMessage()MappingJackson2MessageConverterを使用する必要がありますが、テストのために、私はすべてのメッセージを変更していないです:

private Message<?> modifyMessage(Message<?> message) { 
    return message; 
} 

しかし、メッセージは決してありませんWebクライアントで受信しました。

私はpreSend()方法を変更する場合:

@Override 
public Message<?> preSend(Message<?> message, MessageChannel channel) { 
    return message; 
} 

それがうまく機能するので、これは私のPresendの()メソッドと、私は新しいメッセージを作成する方法の問題のようです。私は間違って何をしていますか?

答えて

1

次のように新しいメッセージを作成する必要があります。

@Override 
public Message<?> preSend(Message<?> message, MessageChannel channel) { 

    Message<?> newMessage = MessageBuilder.createMessage(modifyMessage(message), 
    headerAccessor.getMessageHeaders()); 
    return message; 
    ... 
} 

違いはこのように、メッセージ・ヘッダーには、次のフィールドが含まれていないことである。

  • ID
  • のcontentType
  • タイムスタンプ

何らかの理由で私に知られていなかったため、これによりWebクライアントはメッセージを受信できませんでした。

関連する問題