2015-12-09 2 views
1

Я получаю json in stream и пытаюсь заменить значение одного поля в полезной нагрузке. transform --expression=payload.replaceAll() не соответствует моим потребностям, так как он обрабатывает полезную нагрузку как строку. Я думаю, что такой операциизаменить значение поля JSON, используя SPEL в SpringXD

transform --expression=#jsonPath(payload,'$.result.grupy[*].lp')='new_value' 

, но он не выполняет это распайка. Как построить выражение SPEL/JsonPath для установки нового значения?

мне нужно что-то вроде payload.setField (LP ', '') new_value

ответ

0

Это невозможно сделать это; вам понадобится специальный процессорный модуль или пользовательская функция SpEL для внесения подобных изменений.

Функция #jsonPath просто возвращает элемент из JSON.

0

Не знаете почему payload.replace() выражение не соответствует вашим требованиям, но #jsonPath() SpEL-fuction предназначен для extraction данных от JSON, а не для модификации.

С другой стороны вы неправильно поняли понятие transformer компонента. Он возвращает новый объект, но не изменяет запрос.

Для достижения ваших требований вы должны взглянуть на Content Enricher, который предназначен для изменения входящего payload и возврата его в качестве ответа.

Для того, чтобы упростить вашу жизнь, вы должны взглянуть на <int:object-to-map-transformer>, чтобы иметь возможность изменить поле со следующего <int:enricher> компонента.

Справа, для этого вы должны написать свой собственный модуль processor.