Apache Camel Split - 仅提供一个标头时错误地拆分标头

时间:2018-03-15 13:14:56

标签: apache-camel splitter

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

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

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

1 个答案:

答案 0 :(得分:0)

嗯,我猜Camel对你的用例来说“太聪明了”,因此你会得到不同的行为。

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

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

由于分割器想要分割内容,它需要案例3中的“内部”列表,而案例1和2中的“外部”列表

要解决这个问题,您可以尝试以下几点:

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

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