Spring integration 自动将stomp本机头添加到头的最佳方法
我们的javascript websocket客户端向所有Spring integration 自动将stomp本机头添加到头的最佳方法,spring-integration,spring-websocket,Spring Integration,Spring Websocket,我们的javascript websocket客户端向所有STOMP消息添加“自定义”标题。 我的项目使用SpringWebSocket@Controller处理websocket端点 @MessageMapping(value = "/mymessages") public void save(@Payload ToBeSaved payload, @Headers MessageHeaders headers) { service.save(toMsg(payload, header
STOMP
消息添加“自定义”标题。我的项目使用SpringWebSocket
@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);
}
@MessageMapping(value=“/mymessages”)
public void save(@Payload tobesave Payload,@Headers MessageHeaders){
save(toMsg(有效负载,报头));
}
受保护的消息
toMsg(P有效负载,消息头){
返回MessageBuilder.createMessage(有效负载、头);
}
控制器修改有效负载,然后将新的有效负载和原始websocket头(包括自定义头)传递给spring integration@MessagingGateway
@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);
}
底层的IntegrationFlow
尝试通过使用SPLExpressionheaders['custom']
访问消息头来访问“自定义”头不幸的是,
headers['custom']
始终为空,因为custom
实际上包含在nativeHeaders
中
我还没有找到方法告诉IntegrationFlow
查看nativeHeaders
@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);
}
SpringWebSocket中有没有办法将所有本机头复制为普通头
提前感谢在这件事上,spring websocket对您无能为力。这不是它的责任 如果您确实想访问
nativeHeaders
中的某些内容,则应手动执行此操作
对于您的特殊情况,SpEL可能如下所示:
headers['nativeHeaders']['custom']
因为nativeHeaders
也是一个Map
从另一端,您可以在下游流程中使用
,将所有这些nativeHeaders
弹出到顶层
还有一点:由于Spring集成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);
}
}
}
}
else if(StompHeaderAccessor.NATIVE_HEADERS.equals(name)){
多值映射多值映射=
headers.get(StompHeaderAccessor.NATIVE_headers,MultiValueMap.class);
对于(Map.Entry entry1:multiValueMap.entrySet()){
name=entry1.getKey();
if(shouldMapHeader(名称,this.outboundHeaderNames)){
字符串值=entry1.getValue().get(0);
if(StringUtils.hasText(值)){
SetTompHeader(目标、名称、值);
}
}
}
}
谢谢,我还没有尝试过标题['nativeHeaders']['custom']
,但将来会尝试。