gpt4 book ai didi

java - Stomp 拦截器不工作

转载 作者:行者123 更新时间:2023-12-01 08:47:39 26 4
gpt4 key购买 nike

我正在使用 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;
...
}

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

  • ID
  • 内容类型
  • 时间戳

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

关于java - Stomp 拦截器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com