如何只保留一些消息 headers 并删除所有其他消息?
How to keep only some message headers and remove all others?
如何只保留特定的 headers 而摆脱所有其他 headers?
我正在尝试删除由上游 HttpRequestHandlingMessagingGateway
设置的无关 headers。
我尝试指定一个 handle()
函数,returns 一条新消息只包含我感兴趣的 headers,但它似乎不起作用。日志消息包含一堆从上游 HttpRequestHandlingMessagingGateway
.
设置的 HTTP headers
IntegrationFlows.from(myChannel())
// Strip off the HTTP specific headers
.handle((payload, headers) -> MessageBuilder
.withPayload(payload)
.setHeader("myCustomHeader1", headers.get("myCustomHeader1", String.class))
.setHeader("myCustomHeader2", headers.get("myCustomHeader2", String.class))
.build()
)
.log()
我看到有一个 HeaderFilter,但它要求您知道要删除的 headers 的名称。就我而言,我只想保留 2 个自定义 headers 并删除其他所有内容。
class HeaderStripper {
public Message<?> strip(Message<?> msg) {
return org.springframework.integration.support.MessageBuilder.withPayload(msg.getPayload())
.setHeader("foo", msg.getHeaders().get("foo"))
.setHeader("bar", msg.getHeaders().get("bar"))
.build();
}
}
然后
.transform(new HeaderStripper())
Artem Bilan 的 为我指出了正确的内联方式。我之前无法获得正确的语法,这是内联 transform()
:
的样子
IntegrationFlows.from(myChannel())
// Strip off the HTTP specific headers
.transform(Message.class, message -> MessageBuilder
.withPayload(message.getPayload())
.setHeader("myCustomHeader1", message.getHeaders().get("myCustomHeader1", String.class))
.setHeader("myCustomHeader2", message.getHeaders().get("myCustomHeader2", String.class))
.build()
)
.log()
如何只保留特定的 headers 而摆脱所有其他 headers?
我正在尝试删除由上游 HttpRequestHandlingMessagingGateway
设置的无关 headers。
我尝试指定一个 handle()
函数,returns 一条新消息只包含我感兴趣的 headers,但它似乎不起作用。日志消息包含一堆从上游 HttpRequestHandlingMessagingGateway
.
IntegrationFlows.from(myChannel())
// Strip off the HTTP specific headers
.handle((payload, headers) -> MessageBuilder
.withPayload(payload)
.setHeader("myCustomHeader1", headers.get("myCustomHeader1", String.class))
.setHeader("myCustomHeader2", headers.get("myCustomHeader2", String.class))
.build()
)
.log()
我看到有一个 HeaderFilter,但它要求您知道要删除的 headers 的名称。就我而言,我只想保留 2 个自定义 headers 并删除其他所有内容。
class HeaderStripper {
public Message<?> strip(Message<?> msg) {
return org.springframework.integration.support.MessageBuilder.withPayload(msg.getPayload())
.setHeader("foo", msg.getHeaders().get("foo"))
.setHeader("bar", msg.getHeaders().get("bar"))
.build();
}
}
然后
.transform(new HeaderStripper())
Artem Bilan 的 transform()
:
IntegrationFlows.from(myChannel())
// Strip off the HTTP specific headers
.transform(Message.class, message -> MessageBuilder
.withPayload(message.getPayload())
.setHeader("myCustomHeader1", message.getHeaders().get("myCustomHeader1", String.class))
.setHeader("myCustomHeader2", message.getHeaders().get("myCustomHeader2", String.class))
.build()
)
.log()