Stomp Interceptor无法正常工作

时间:2017-03-03 10:13:34

标签: java stomp spring-websocket stomp-websocket

我正在使用Spring WebSockets。它运行良好,但我现在有一个案例,我需要在将消息发送到Web客户端之前修改它。

因此我创建了以下拦截器:

@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;
}

但是,Webclient从未收到该消息。

当我将preSend()方法更改为:

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

然后它运行良好,所以这似乎是我的preSend()方法和我创建新消息的方式的问题。我做错了什么?

1 个答案:

答案 0 :(得分:1)

必须按如下方式创建新消息:

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

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

不同之处在于,消息头不包含以下字段:

  • ID
  • 的contentType
  • 时间戳

由于某些我不知道的原因,这阻止了Web客户端接收消息。