2015-10-21 4 views
1

Предположим, что мои входящие данные представляют собой объект json или массив объектов json. Я хочу разбить входящие json-данные, если это массив, чтобы я мог вставлять их в коллекцию MongoDB (для простоты давайте просто заходим в консоль на данный момент).Как разбить входящий массив объектов Json в Spring XD?

  1. Определить поток

    XD:> поток создать splittest --definition "HTTP | JSON к кортежу | разветвитель | войти" --deploy

  2. Опубликовать один объект

    xd:> http post --data "{\" dog \ ": \" chihuahua \ "}"

    21T09: 05: 59-0700 1.2.0.RELEASE INFO pool-44-thread-4 раковина. splittest - {"dog": "chihuahua"}

    Ожидается, что выход будет представлять собой один объект - ничто не будет разделено.

  3. сообщение массив объектов

    XD:> HTTP POST --data "[{\" собака \ ": \" пуделем \ "}, {\" собака \ ": \" чихуахуа \» }, {\ "собака \": \ "пудель \"}]»

    21T09: 43: 05-0700 1.2.0.RELEASE INFO бассейн-44-токарно-11 sink.splittest - {}

    В этом случае я ожидал увидеть три отдельных объекта собаки, напечатанных в каждой строке, но напечатал один пустой объект.

Что я делаю неправильно? Может кто-нибудь предложить, что может/должно было быть сделано?

+0

Кажется, так как ваша POST обработчика сделок с одной собакой штрафа, но не массив собак, что ошибка в коде, который обрабатывает запрос POST, а не команды, которые посылают указанный запрос. Если вы разместите этот код, я постараюсь вам помочь. – awimley

+0

Второй пост вернулся 200 OK, и сервер не выдал никакой ошибки. Он напечатан точно так, как показано выше. И для этого нет кода. Я сделал это, используя чистую интеграцию с весной, но я не хотел беспокоиться о написании клиентского трансформатора и сплиттера для Spring XD. Я пытаюсь использовать готовые функции XD насколько могу. – nanaboo

+0

Извините, я не достаточно знаком с Spring XD, чтобы помочь. – awimley

ответ

0

Выяснено, как это сделать. Мне не нужно было использовать процессор json-to-tuple.

xd:>stream create splittest2 --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') | log" --deploy 

xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"}, {\"dog\":\"poodle\"}]" 

2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle} 
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=chihuahua} 
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle} 

Таким образом, он работает с несколькими объектами, однако он не обрабатывает один объект, как я ожидал.

xd:>http post --data "{\"dog\":\"chihuahua\"}" 
2015-10-21T10:56:11-0700 1.2.0.RELEASE INFO pool-83-thread-10 sink.splittest2 - chihuahua 
+0

Может быть, этот '' .. ..''? –

+0

достаточно близко. Он разбивает массив (который я хочу) И разбивает каждую собаку. – nanaboo

+0

sink.splittest2 - {собака} = пуделя sink.splittest2 - {собака} = чихуахуа sink.splittest2 - {собака} = пуделя sink.splittest2 - пудель sink.splittest2 - чихуахуа sink.splittest2 - пудель – nanaboo