【问题标题】:Best way to automatically add stomp native headers to headers将 stomp 本机标头自动添加到标头的最佳方法
【发布时间】:2015-07-28 22:29:27
【问题描述】:

我们的 javascript websocket 客户端向所有 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);
}

控制器修改有效负载,然后将新的有效负载和原始 websocket 标头(包括自定义标头)传递给 spring-integration @MessagingGateway

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

我还没有找到让IntegrationFlow 调查nativeHeaders 的方法。

spring-websocket 中有没有办法将所有本机标头复制为普通标头?

提前致谢

【问题讨论】:

    标签: spring-integration spring-websocket


    【解决方案1】:

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

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

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

    headers['nativeHeaders']['custom']
    

    因为nativeHeaders 也是Map

    从另一端,您可以在下游流中使用&lt;header-enricher&gt; 将所有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);
                        }
                    }
                }
            }
    

    【讨论】:

    • 谢谢,我还没有尝试过headers['nativeHeaders']['custom'],但以后会尝试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2023-01-02
    • 1970-01-01
    • 2015-05-16
    • 2018-08-15
    • 2016-10-18
    • 1970-01-01
    相关资源
    最近更新 更多