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, 28 февраля 2018 г.

Почему разделитель для одного заголовка работает по-разному и как это исправить?


person wkrol    schedule 15.03.2018    source источник


Ответы (1)


Что ж, я предполагаю, что Camel «слишком умен» для вашего варианта использования, и поэтому вы получаете другое поведение.

Варианты 1 и 2 — это список списков. Список flight параметров, и каждый параметр содержит список значений, разделенных запятыми.

Случай 3 — простой список. Один параметр flight, содержащий список значений, разделенных запятыми.

Поскольку сплиттер хочет разделить элементы, он берет "внутренний" список в случае 3, а "внешний" список — в случаях 1 и 2.

Чтобы решить проблему, вы можете попробовать несколько вещей:

  • Измените разделитель внутренних списков (используйте, например, - вместо ,), чтобы Camel не думал, что ваш параметр flight содержит список в случае 3.
  • Add a flight parameter in Case 3 that is empty or contains a dummy value so that you always have an "outer" list.
    • Use a bean before the splitter and convert the parameter into a structure that is not mis-interpreted by the splitter

Если вы не контролируете параметры URI, вы можете использовать bean-компонент для применения одного из первых двух предложений.

person burki    schedule 16.03.2018
comment
Спасибо @burki, я пошел с преобразованием параметра, и это работает. Это хорошие предложения. - person wkrol; 16.03.2018