Spring Integration DSL的EnrichedHeaders没有被替换。

问题描述 投票:0回答:1

使用 Boot 2.2.6 和 SI 5.2.5,我试图用一个对象来丰富报头。然而,在流程的第二次传递中,新的报文头确实包含了一个新的消息 UUID(所以我知道它是一个新的报文头),但丰富的报文头并没有被新的对象所取代,而是包含了以前的对象。

比如说

@Configuration
public class MyFlow {

  public static class Original {
    String original;
    UUID   uuid;

    public Original() { uuid = UUID.randomUUID(); }
    public void setOriginal(String s) { original = s; }
    public String getOriginal() { return original; }
  }

  @Bean IntegrationFlow doIt() {
    return IntegrationFlows
      .from("somewhere")
      .enrichHeaders(h -> h.header("ORIGINAL", new Original()))
      .handle((p, h) -> {
        System.err.println(h); // --1
        Original original = (Original) h.get("ORIGINAL");
        original.setOriginal(p.toString());
        System.err.println(h); // --2
      })
      .channel("next")
      .get();
  }
}

在第一次传递的时候。

-- 1 original.uuid = new UUID, original.original = null。

-- 2 original.uuid = 和以前一样,original.original = 新的有效载荷。

在第二道。

-- 1 original.uuid = 同前,original.original = 同前;

-- 2 original.uuid = 和以前一样,original.original = 新的有效载荷。

我想 Original 是一个新的对象。我认为 class OriginalenricherHeaders 是不正确的。我到底错在哪里?

spring-integration spring-integration-dsl
1个回答
1
投票

默认情况下,头不会被覆盖。

h -> h.defaultOverwrite(true).header("ORIGINAL", new Original())

或者

h -> h.header("ORIGINAL", new Original(), true);

你通常会用第一个多头。

© www.soinside.com 2019 - 2024. All rights reserved.