Spring integration Spring集成DSL EnrichedHeaders未被更换
使用Boot 2.2.6和SI 5.2.5,我试图用一个对象来充实头部。然而,在流的第二个过程中,新的头包含一个新的消息UUID,所以我知道它是一个新的头,但是充实的头并没有被一个新对象替换,而是包含了以前的对象 比如,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
@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);