Spring Integration:recipient-list-router的selector-expression枚举匹配求助
Spring Integration Recipient List Router 表达式匹配问题解决
问题根源
你不需要把枚举ActivityStatus注册为Bean,枚举本身是静态类型,直接通过全限定类名在SpEL中引用即可。之前的配置错误在于误用了Bean引用语法,还存在语法拼写错误。
正确配置写法
在selector-expression中使用SpEL的T()语法引用枚举类,直接访问枚举常量并调用方法:
假设ActivityStatus的全限定类名为com.yourpackage.enums.ActivityStatus,正确配置如下:
<int:recipient-list-router input-channel="yourInputChannel"> <int:recipient selector-expression="T(com.yourpackage.enums.ActivityStatus).START.getStatus().equals(payload.getStatus())" channel="abc"/> </int:recipient-list-router>
简化写法
如果payload.getStatus()返回的字符串和枚举START的getStatus()结果完全一致,也可以用==直接比较:
<int:recipient selector-expression="T(com.yourpackage.enums.ActivityStatus).START.getStatus() == payload.getStatus()" channel="abc"/>
关键说明
- SpEL中通过
T(全限定类名)访问Java静态类型(包括枚举),无需额外注册Bean - 务必替换成你项目中
ActivityStatus实际的全限定类名,否则会抛出类型找不到的异常 - 若payload中的status字段是枚举类型而非字符串,可直接比较枚举实例:
T(com.yourpackage.enums.ActivityStatus).START == payload.getStatus()
内容的提问来源于stack exchange,提问作者KeepItSimple
相关产品推荐
相关产品推荐

