Spring integration headers-拆分字符串的spel

Spring integration headers-拆分字符串的spel,spring-integration,spring-el,Spring Integration,Spring El,我必须拆分标题中的字符串 <int:header name="plans-array" expression="headers['plans'].split(',')"/> 如何将这个字符串数组转换成下面的列表,自动转换列表 @Value("#{'${plans}'.split(',')}") private List<String> myList; @Value(“#{${plans}.split(',')}”) 私人名单; 我尝试了如下操作,但无法正常

我必须拆分标题中的字符串

<int:header name="plans-array" expression="headers['plans'].split(',')"/>

如何将这个字符串数组转换成下面的列表,自动转换列表

 @Value("#{'${plans}'.split(',')}") 
 private List<String> myList;
@Value(“#{${plans}.split(',')}”)
私人名单;
我尝试了如下操作,但无法正常工作

<int:header name="plans-list" expression="T(java.util.Arrays).asList(headers['plans'].split(','))"/>

集成xml

<int:channel id="splitChannel"/>
<int:header-enricher input-channel="splitChannel">
    <int:header name="isPlanExist" expression="T(java.util.Arrays).asList((headers['plans'].split(','))).contains('plan1')"/>
</int:header-enricher>

朱尼特

@Autowired
@限定符(“拆分通道”)
专用消息通道;
@试验
公共void testSplit(){
字符串somePayload=“somePayload”;
Message stringPayload=MessageBuilder.withPayload(somePayload)
.setHeader(“计划”、“计划1、计划2”)
.build();
MessagingTemplate=新建MessagingTemplate();
Assert.assertEquals(true,template.sendAndReceive(this.splitChannel,stringPayload).getHeaders().get(“isplaneExist”);

很好,现在我知道你的问题了

您的代码类似于
T(java.util.Arrays).asList((headers['plans'].split(',')))

在Java中,它工作得很好,因为编译器将一个数组类型的参数视为varargs

这里我们有一个SpEL,它在大多数情况下都是基于反射方法调用的。因此,没有编译器优化,我们最终得到的事实是只有一个元素的
List
,而不像您期望的有两个元素的
List

我不会说这是一个SpEL问题,Java反射就是这样工作的

为了解决你的问题,你应该考虑使用其他的<代码>数组>列表< /Cult>实用程序来绕过VARARGS问题,例如:

T(org.springframework.util.CollectionUtils).arrayToList(headers['plans'].split(',')).contains('plan1')

这可以很好地工作,并且计划数组具有字符串[]但只是在调试模式中得到上面提到的错误。什么是
调试模式
?我们如何在本地重现它?感谢教授的延迟响应。我是指调试日志。我得到的字符串数组是用逗号分隔的。请为编辑的问题建议解决方案。好吧,你是间谍吗?为什么不告诉或展示它是如何工作的?数组存在什么问题,并将其转换为Java代码中下游某个位置的列表?我们可以在donwstream中转换它,但只需检查几行没有Java代码的集成的可行性。明白了..工作得很好!!如果我的问题让您困惑,真的很抱歉。
T(org.springframework.util.CollectionUtils).arrayToList(headers['plans'].split(',')).contains('plan1')