Spring Integration中如何用SpEL为消息头列表添加元素生成新列表?
在Spring Integration中通过header-enricher扩展消息头列表
要实现向消息头中已有的列表添加新元素并生成扁平的新列表,你可以通过SpEL调用Java集合类的方法来完成,避免出现嵌套列表的问题。
解决方案1:双括号初始化(简洁直观)
直接复制原有列表并添加新元素:
<si:header-enricher default-overwrite="true"> <si:header name="myList" expression="new java.util.ArrayList<>(headers.myList) {{ add('z'); }}"/> </si:header-enricher>
解决方案2:Stream API合并(适合Java 8+)
利用Stream流合并原有列表和新元素,再收集为新列表:
<si:header-enricher default-overwrite="true"> <si:header name="myList" expression="T(java.util.stream.Stream).concat(headers.myList.stream(), T(java.util.stream.Stream).of('z')).collect(T(java.util.stream.Collectors).toList())"/> </si:header-enricher>
完整配置示例
<!-- 初始化消息头列表 --> <si:header-enricher> <si:header name="myList" expression="{ 'x', 'y' }"/> </si:header-enricher> <!-- 扩展列表并覆盖原有头 --> <si:header-enricher default-overwrite="true"> <si:header name="myList" expression="new java.util.ArrayList<>(headers.myList) {{ add('z'); }}"/> </si:header-enricher>
执行后,myList的值将变为['x', 'y', 'z'],而非你之前遇到的嵌套列表格式。
内容的提问来源于stack exchange,提问作者al.truisme
相关产品推荐
相关产品推荐

