簡體   English   中英

Spring Integration jsonToObjecttransformer異常

[英]spring integration jsonToObjecttransformer exception

我可以使用spring集成從Mongo DB中獲取數據,然后調用Transformer。 我讀到有關JsonToObjectTransformer ,該信息可用於將json轉換為相應的對象。 我正在嘗試達到相同的目的,但是我遇到了例外。

    'json' argument must be an instance of: 
[class java.lang.String, 
class [B, class java.io.File, 
class java.net.URL, 
class java.io.InputStream, 
class java.io.Reader] , 
but gotten: class java.util.ArrayList

問題是,當我從MongoDB進行輪詢時,會以以下形式獲取有效負載:

[
{ "_id" : { "$oid" : "5ab3e2af453d578d2e07090b"} , "status" : "new" , "message" : "a|b|c|d"}, 
{ "_id" : { "$oid" : "5ab3ea28453d578d2e07090d"} , "status" : "new" , "message" : "a|b|c|d|e"}
]

該有效負載傳遞給使用JsonToObjectTransfomer的Transformer。

由於json是一個列表,並以[開頭,因此在轉換為對象時出現異常。

一種可能的解決方案是使用濃縮器在將有效載荷傳遞到變壓器之前對其進行濃縮。

但是還有其他解決方案嗎?

謝謝,

阿馬爾

好吧,關鍵是java.util.ArrayList不再是JSON。 確實是和Object 因此,轉換器是正確的:您沒有為解析和轉換指定預期的類型。

不確定如何從MongoDB獲得結果,但是它已經是java.util.ArrayList驅動程序或Spring Data已經為您完成了竅門,並且您已將JSON轉換為POJO或Maps列表。

但是得到了:類java.util.ArrayList

聽起來好像已經從JSON反序列化了。

我能夠通過執行以下操作來解決它:

公共MessageSource mongoMessageSource(MongoDbFactory mongoDbFactory){

    MongoDbMessageSource mongoDbMessageSource = new MongoDbMessageSource(mongoDbFactory,
            new LiteralExpression(new BasicDBObject("status","new").toString().concat(".limit(1)")));
    mongoDbMessageSource.
            setCollectionNameExpression(new LiteralExpression("BankAccountDetail"));
    mongoDbMessageSource.setEntityClass(AccountBalanceDetailsWrapper.class);//added this for default
    return mongoDbMessageSource;

然后在變形金剛

public void show(Message<List<AccountBalanceDetailsWrapper>> message) {
        message.getPayload().stream().forEach(System.out::println);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM