Stomp拦截器不工作
问题描述:
我正在使用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;
}
然而,消息是永远在Webclient上收到。
当我改变preSend()
方法:
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
return message;
}
然后它工作得很好,所以这似乎是我的preSend()方法的一个问题,我创建一个新的消息的方式。我究竟做错了什么?
答
必须按如下方式创建新的消息:
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
Message<?> newMessage = MessageBuilder.createMessage(modifyMessage(message),
headerAccessor.getMessageHeaders());
return message;
...
}
不同的是,这样一来,消息头不包含以下字段:
- ID
- 的contentType
- 时间戳
由于某种原因我不知道,这阻止了Web客户端收到消息。