2017-05-16 20 views
0

私はこのような何か投稿しています:次のように私は、コントローラ内のデータを取得することができますポストJSON配列

{ 
    "stuff": [ 
    { 
     "thingId": 1, 
     "thingNumber": "abc", 
     "countryCode": "ZA" 
    }, 
    { 
     "thingId": 2, 
     "thingNumber": "xyz", 
     "countryCode": "US" 
    } 
    ] 
} 

を:

@RequestMapping(value = "/stuffs", method = RequestMethod.POST) 
public String invoices(@RequestBody Map<String, List <Stuff>> stuffs) { 

    return "Hooray"; 
} 

私が本当にしたいのですがどのようなコントローラーにList of Stuffを渡すだけです。すなわち、

@RequestMapping(value = "/stuffs", method = RequestMethod.POST) 
public String invoices(@RequestBody List <Stuff> stuffs) { 

    return "I'm sad that this won't work."; 
} 

しかし、ジャクソンはこれを好まない。私が得るエラーは以下の通りです:

JSONドキュメントを読み取れませんでした:[ソースでSTART_OBJECTトークン\ nのうちの java.util.ArrayListのインスタンスをデシリアライズできません: [email protected]。行:1、列:1]; 例外はcom.fasterxml.jackson.databind.JsonMappingExceptionです。 は、[ソース:[email protected]で、START_OBJECT トークンのうち、java.util.ArrayListのインスタンスを非直列化できません。行:1、 コラム:1]

(それが有効なJSONではありませんので)私は、次の中で送信することはできません。

{ 
     [ 
     { 
      "thingId": 1, 
      "thingNumber": "abc", 
      "countryCode": "ZA" 
     }, 
     { 
      "thingId": 2, 
      "thingNumber": "xyz", 
      "countryCode": "US" 
     } 
     ] 
    } 

私は、これは単純なものであることを確信しているが、私は蒸留することはできません私のStackOverflowやGoogle検索からの回答。

助けていただけたら幸いです! :)

答えて

1
あなたはそれがリストを解析する必要があること、それはリストではありませんリスト

を含むオブジェクトである必要がありジャクソンを教えてくれたときにのみ、あなたのコントローラでは、中括弧なし

[ 
    { 
     "thingId": 1, 
     "thingNumber": "abc", 
     "countryCode": "ZA" 
    }, 
    { 
     "thingId": 2, 
     "thingNumber": "xyz", 
     "countryCode": "US" 
    } 
    ] 

これを送信する必要が

あなたは(OPの質問にある「スタッフ」クラス)JavaクラスずにJSONの配列を取得しようとしている場合は、次のように春のブートコントローラを設定する必要がありますことを

+0

はい!期限が過ぎるとすぐに、これを受け入れられた答えとして選択します。あなたは私をいくつかの激しい挫折から救ったのです! – orrymr

+1

うれしい –

0

注:

@RequestMapping(value = "/stuffs", method = RequestMethod.POST) 
public String invoices(@RequestBody Map<String, Object> [] stuffs) { 

    return "Hooray"; 
}