Java 跺脚拦截器不工作

Java 跺脚拦截器不工作,java,stomp,spring-websocket,stomp-websocket,Java,Stomp,Spring Websocket,Stomp Websocket,我使用的是Spring WebSocket。它工作得很好,但我现在遇到了一个情况,在将消息发送到web客户端之前,我需要修改消息 因此,我创建了以下拦截器: @Component public class StompMappingInterceptor extends ChannelInterceptorAdapter { @Override public Message<?> preSend(Message<?> message, MessageChannel

我使用的是Spring WebSocket。它工作得很好,但我现在遇到了一个情况,在将消息发送到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;
    ...
}
但是,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;
    ...
}
@覆盖
公共消息呈现(消息消息、消息通道){
Message newMessage=MessageBuilder.createMessage(modifyMessage(Message)),
headerAccessor.getMessageHeaders());
返回消息;
...
}
不同之处在于,通过这种方式,消息头不包含以下字段:

  • 身份证
  • 内容类型
  • 时间戳
由于我不知道的原因,这阻止了web客户端接收消息

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

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