我已经实现了接收多个参数作为查询的端点
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 应用前两个建议之一。