如何只保留一些消息 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()