gpt4 book ai didi

spring-integration - 自动将 stomp native header 添加到 header 的最佳方法

转载 作者:行者123 更新时间:2023-12-04 07:55:37 25 4
gpt4 key购买 nike

我们的 javascript websocket 客户端将“自定义” header 添加到所有 STOMP 消息中。
我的项目使用 spring-websocket @Controller 处理 websocket 端点。

@MessageMapping(value = "/mymessages")
public void save(@Payload ToBeSaved payload, @Headers MessageHeaders headers) {
service.save(toMsg(payload, headers));
}

protected <P> Message<P> toMsg(P payload, MessageHeaders headers) {
return MessageBuilder.createMessage(payload, headers);
}

Controller 修改有效载荷,然后将新的有效载荷和原始 websocket header (包括自定义 header )传递给 spring-integration @MessagingGateway

底层 IntegrationFlow 尝试通过使用 SPLExpression headers['custom'] 访问消息 header 来访问“自定义” header 。
不幸的是,headers['custom'] 始终为 null,因为 custom 实际上包含在 nativeHeaders 中。

我还没有找到告诉 IntegrationFlow 查看 nativeHeaders 的方法。

spring-websocket 中有没有一种方法可以将所有 native header 复制为普通 header ?

提前致谢

最佳答案

spring-websocket 在这件事上对你无能为力。这不是它的责任。

如果您真的想访问 nativeHeaders 中的某些内容,您应该手动执行此操作。

对于您的特定情况,SpEL 可能如下所示:

headers['nativeHeaders']['custom']

因为 nativeHeadersMap

从另一边你可以使用<header-enricher>在你的下游流中弹出所有这些 nativeHeaders到顶层。

还有一点:自 Spring Integration 4.2我们为 STOMP 适配器提供原生支持。还有一个 StompHeaderMapper这正是你想要的,那里的代码看起来像:

 else if (StompHeaderAccessor.NATIVE_HEADERS.equals(name)) {
MultiValueMap<String, String> multiValueMap =
headers.get(StompHeaderAccessor.NATIVE_HEADERS, MultiValueMap.class);
for (Map.Entry<String, List<String>> entry1 : multiValueMap.entrySet()) {
name = entry1.getKey();
if (shouldMapHeader(name, this.outboundHeaderNames)) {
String value = entry1.getValue().get(0);
if (StringUtils.hasText(value)) {
setStompHeader(target, name, value);
}
}
}
}

关于spring-integration - 自动将 stomp native header 添加到 header 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31688222/

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