如何在 Spring XD 中拆分传入的 Json 对象数组?

How to split incoming Json objects array in Spring XD?

假设我的传入数据是一个 json 对象或一个 json 对象数组。 我想拆分传入的 json 数据 iff 它是一个数组,以便我可以将它们插入到 MongoDB 集合中(为简单起见,我们现在只登录到控制台)。

  1. 定义流

    xd:>stream create splittest --definition "http | json-to-tuple | splitter | log" --deploy

  2. Post单个对象

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

    21T09:05:59-0700 1.2.0.RELEASE INFO pool-44-thread-4 sink.splittest - {"dog":"chihuahua"}

    这是预期的输出,因为输入是单个对象 - 无需拆分。

  3. Post 对象数组

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

    21T09:43:05-0700 1.2.0.RELEASE INFO pool-44-thread-11 sink.splittest - {}

    在这种情况下,我希望看到每行打印三个单独的狗对象,但它打印了一个空对象。

我做错了什么?有人可以建议 could/should 已经完成了什么吗?

想出如何做到这一点。我不需要费心使用 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