2017-02-14 55 views
0

我想使用Splitter應用程序拆分JSON數組,例如[{...},{...}]分成多個訊息{...} {...}。隨着輸入的contentType =應用程序/ JSON(每個文檔)春季雲從傑克遜浮出水面異常:Spring雲數據流分離器與JSON陣列

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token at [Source: [[email protected]; line: 1, column: 1] 

單元測試表明我對分裂的正確模式工作:

splitter.expression=#jsonPath(payload,'$.[*]') 

這在Spring XD 1.3中爲我工作。 Spring Cloud(或Splitter)應該如何配置來處理這種情況?輸入和輸出都是Kafka字符串(無標題)。

+0

我還可以補充一點,使用input.contentType = text/plain會產生這種有點神祕的異常:當發送一條消息時,拋出異常時發生key ='null'和payload ='{ - 1,5,13,​​99,111, 114,114,101,108,97,116,105,111,110,73,100,0,0,0,38,34,102,55,...' –

+0

您確定您正在使用數據流流在這種情況下?或者,您的意思只是一個從kafka主題接收數據的Spring Cloud流應用程序? –

回答

0

如果到分離器的消息來自非Spring Cloud Stream應用程序,那麼您需要設置--spring.cloud.stream.bindings.<inputChannelName>.consumer.headerMode=raw。儘管application/json contentType消息具有傑克遜異常,但至少會根據表達式適當地評估text/plain contentType消息。

+0

關於發送,我現在正在'未能發送消息到頻道'輸出';嵌套異常是java.lang.IllegalArgumentException:有效負載不能爲空。我打開調試日誌,肯定有東西在有效載荷中: –

+0

'DEBUG 1311 --- [afka-listener-1] osintegration.channel.DirectChannel:preSend在channel'output'上,消息:GenericMessage [payload = { 「some」:「data」},headers = {sequenceNumber = 1,kafka_offset = 2663,sequenceSize = 1,correlationId = f9c64983-5908-af0c-3b2c-bb9c4bb03e86,id = 07 3d1d21-8474-bdf0-46c8-e4a71e2117b2, kafka_receivedPartitionId = 0,kafka_receivedTopic = MyTopic,contentType = te xt/plain,timestamp = 1487206118408}]' –

+0

我可以看到這個問題嗎? http://stackoverflow.com/questions/41781351/spring-cloud-dataflow-type-conversion-not-working-in-processor-component –