Я пытаюсь получить доступ к данным во входящем {теле} моего входящего Json. Я выполнил демаршалинг с Джексоном и сопоставил его с классом карты Java с помощью
`.unmarshal().json(JsonLibrary.Jackson, java.util.Map.class)
`
Мои входящие данные Json выглядят примерно так, как только после неуместного шага выше
{ "projectId" : 12345,
"title" : “12345 - Plant 1 Processing",
"partners": [{"partnerName": "partnerJV1", "partnerLocation": "JA"},
{"partnerName": "partnerJV2", "partnerLocation": "FL"},
{"partnerName": "partnerJV3", "partnerLocation": "OH"}
]
Поле партнеров может содержать 0-N номеров partnerName, partnerLocation maps.
Теперь я вставляю это в таблицу SQL с
.to("sql:classpath:sql/sql_queries.sql")
Мой sql_queries.sql содержит следующий запрос для вставки полей данных в таблицу:
INSERT INTO MY_TABLE(PID, TITLE, PartnerName1, PartnerLocation1, PartnerName2, PartnerLocation2, PartnerName3, PartnerLocation3) VALUES(:#${body['projectId']}, :#${body['title']}, :#${body['partners[0]']['partnerName']}, :#${body['partners[0]']['partnerLocation']} )
Моя проблема в том, что я не могу знать точное число партнеров, и без него я не могу написать свое заявление SQL. Я получаю исключение IndexOutOfBounds, если получу доступ, скажем: # $ {body ['partners'] [2] ['partnerName']}
Но во входящем теле есть только один партнер.
Так как я могу в верблюде перебирать вложенную карту в моем JSON, основываясь на ее длине, и инициализировать поля PartnerName, PartnerLocation для моего оператора вставки?