如何使用Spring DSL统计Exchange报文中子字符串出现次数,不借助Java Bean
Spring DSL 子字符串计数实现方案
不需要自定义Java Bean,有两种开箱即用的实现方式:
方式1:基于SpEL+JDK原生方法实现
通过字符串长度差计算子串出现次数,逻辑为:(原始字符串长度 - 所有目标子串替换为空后的长度) / 目标子串长度,不需要依赖任何额外工具类:
- Spring XML DSL 示例:
<!-- 统计报文中OK的出现次数,结果存入okCount头字段 --> <setHeader headerName="okCount"> <spel>#{body != null ? (body.length() - body.replace('OK', '').length()) / 2 : 0}</spel> </setHeader>
- Spring Java DSL 示例:
.setHeader("okCount", spel("body != null ? (body.length() - body.replace('OK', '').length()) / 2 : 0"))
公式中的2对应子串OK的长度,统计其他子串时修改为对应长度即可,空判断逻辑可避免报文为null时的空指针异常。
方式2:基于Camel自带StringHelper工具类实现
你之前用到的countChar仅支持单字符统计,同一个StringHelper类下就有专门统计子串出现次数的countOccurrenceOf方法,可直接调用:
- Spring XML DSL 示例:
<setHeader headerName="okCount"> <spel>#{T(org.apache.camel.util.StringHelper).countOccurrenceOf(body, 'OK')}</spel> </setHeader>
- Spring Java DSL 示例:
.setHeader("okCount", spel("T(org.apache.camel.util.StringHelper).countOccurrenceOf(body, 'OK')"))
该方式代码更简洁,可读性更高,默认已处理空值边界场景。
内容的提问来源于stack exchange,提问作者DevelopperX
相关产品推荐
相关产品推荐

