Spring integration Spring集成DSL EnrichedHeaders未被更换

Spring integration Spring集成DSL EnrichedHeaders未被更换,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,使用Boot 2.2.6和SI 5.2.5,我试图用一个对象来充实头部。然而,在流的第二个过程中,新的头包含一个新的消息UUID,所以我知道它是一个新的头,但是充实的头并没有被一个新对象替换,而是包含了以前的对象 比如, @Configuration public class MyFlow { public static class Original { String original; UUID uuid; public Original() { uuid

使用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=新uuid,original.original=null

-2 original.uuid=与之前相同,original.original=新有效负载

第二关

-1 original.uuid=与以前相同,original.original=与以前相同

-2 original.uuid=与之前相同,original.original=新有效负载


我希望原版成为一个新的对象。我假设类Original或enricherHeaders的定义不正确。我哪里做错了

默认情况下不会覆盖标题

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


您通常会将第一个标题与多个标题一起使用。

非常感谢您的回复。我的错误是专注于集成流定义。enrichHeaders。。。我完全忽略了HeaderRicherSpec doh的API。谢谢你给我指出了正确的方向。恐怕这两个小费都不管用。但是,headerFunctionORIGINAL,m->new Original,true确实有效@加里鲁塞尔
h -> h.header("ORIGINAL", new Original(), true);