java - 如何只保留一些邮件标题并删除所有其他邮件标题?

标签 java spring-integration spring-integration-dsl

如何仅保留特定 header 但删除所有其他 header ?

我正在尝试删除由上游 HttpRequestHandlingMessagingGateway 设置的不相关 header 。

我尝试指定一个 handle() 函数,该函数返回一条仅包含我感兴趣的 header 的新消息,但它似乎不起作用。日志消息包含一堆从上游 HttpRequestHandlingMessagingGateway 设置的 HTTP header 。

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但它要求您知道要删除的 header 的名称。就我而言,我只想保留 2 个自定义 header 并删除其他所有内容。

最佳答案

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())

关于java - 如何只保留一些邮件标题并删除所有其他邮件标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983611/

相关文章:

java - 我似乎找不到 android.R.id.radio0?(除其他外)

java - [警告][插件]插件 jdbc- River,无法调用自定义 onModule 方法

java - 如何检查字符串是否包含列表中的子字符串?

java - Controller 测试中没有类型 'org.springframework.boot.actuate.health.HealthEndpoint' 的合格 bean

java - 通过 .handle() 配置服务激活器的输出 channel

java - 来自 Transformer 的 Spring Integration 路由消息

java - Spring Integration Http 休息服务

Spring MessageBuilder 与 Spring Integration MessageBuilder

java - 如何解决 outbound-gateway 不允许使用 http-method

spring-integration - Spring Integration DSL 中 ConsumerEndpointSpec.transactional() 的使用