踩踏拦截器不工作
Stomp Interceptor not working
我正在使用 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;
}
但是,Web 客户端从未收到该消息。
当我将 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;
...
}
区别在于,这种方式的消息头不包含以下字段:
- 编号
- 内容类型
- 时间戳
出于某种我不知道的原因,这导致 Web 客户端无法接收消息。
我正在使用 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;
}
但是,Web 客户端从未收到该消息。
当我将 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;
...
}
区别在于,这种方式的消息头不包含以下字段:
- 编号
- 内容类型
- 时间戳
出于某种我不知道的原因,这导致 Web 客户端无法接收消息。