Apache Camel Split - 当只提供一个标头时,拆分标头不正确



我已经实现了接收多个参数作为查询的端点

i.e: /flights?flight=AB,100,12FEB18&flight=CD,200,13FEB18&flight=...&...

在骆驼中,我想拆分每个飞行参数并单独处理它,所以我有:

.split(header("flight"))

案例1

Query: /flights?flight=AB,100,24FEB18&flight=AB,200,25FEB18

拆分为:
1)AB, 100, 24FEB18
2) AB, 200, 25FEB18

结果:正确

案例2

Query: /flights?flight=AB&flight=AB,100&flight=AB,200,26FEB18

拆分为:
1)AB
2) AB, 100
3) AB, 200, 26FEB18

结果:正确

案例3

Query: /flights?flight=AB,400,28FEB18

拆分为:
1)AB
2) 400
3) 28FEB18

结果:不正确

预期:
1)AB, 400, 28FEB18

为什么一个标头的拆分器的工作方式不同,我该如何解决?

好吧,我想Camel对于您的用例来说"太聪明了",因此您会有不同的行为。

案例 1 和 2 是列表列表flight参数的列表,每个参数都包含逗号分隔值的列表。

案例 3 是一个简单的列表。包含逗号分隔值列表的单个flight参数。

由于拆分器想要拆分内容,因此它在案例 3 中采用"内部"列表,而在案例 1 和 2 中采用"外部"列表

要解决此问题,您可以尝试以下几种方法:

  • 更改内部列表的分隔符(例如使用-而不是,),以便 Camel 不会认为您的flight参数包含情况 3 中的列表。
  • 在案例 3 中添加一个空或包含虚拟值的flight参数,以便您始终具有"外部"列表。 在
    • 拆分器之前使用 bean,并将参数转换为不会被拆分器误解的结构

如果您无法控制 URI 参数,则可以使用 Bean 应用前两个建议之一。

相关内容

最新更新