本ブログにはプロモーションが含まれております。

Java

【Java】Springのjsonマッピングで配列の箇所がエラーになるときの対処法

スポンサーリンク

SpringBootを使って開発をしていたのですが、素のJavaとは違ってjsonを送ると勝手にクラスにマッピングしてくれるので、便利ですよね。しかし、単純なjsonなら良いのですが、複雑なjsonを送った場合はサーバー側で上手く処理をしてくれないときがありました。そこで今回は、Springのjsonマッピングに置いて、配列を持つjsonが上手く処理されずにエラーになってしまう問題を解決します。
これだけに1~2時間悩んでしまったので、もう2度と悩まないようにここに記しておきます。。

配列を持つjson変換時に起きていたエラーを解決する

それでは、json変換時のエラーを解決します。結論から言うと、以下の3点に気をつけるだけでエラーが解決しました。

  • コントローラクラスの引数に@RequestBodyをつける
  • ajaxでjsonを送信する時に、contentType="application/json"を指定する
  • jsonが配列であるオブジェクトは、JavaクラスではListにする

詳しくはこの記事の下の方にあるコードをご覧ください。

起きていたエラー

当時は何をしても以下のエラーが繰り返されるだけで、全く進展がない状態でした。

  • json[hoge][0]はMapでもListでもありません…のようなエラー
  • List<init>が存在しない…のようなエラー
  • NumberFormatExcetion
  • NoSuchMethodException
  • jsonの中身が全てnullになってしまう

json

{
  "hoge": "abc", 
  "fuga": [
    {"piyo": "def"},
    {"piyo": "ghi"}
  ]
}

これが今回ハマった原因なのですが、jsonが配列を持っています。

Javaクラス

コントローラクラス。必要な部分以外は省略しています。

@RequestMapping(value = "/getJson", method = RequestMethod.POST)
public void getJson( @RequestBody ReceiveForm form){ //注意。@RequestBodyつける。
  //適当な処理
}

jsonマッピングクラス

public class ReceiveForm{
  private String hoge;
  private List<String> piyo; // 注意。Listにする。

  //setter, getter省略中
}

javascript

$.ajax({
  url: '〜〜〜/getJson',
  type: 'POST',
  dataType: 'json',
  contentType: 'application/json', //注意。忘れないこと。
  data: 先程のjson
})

これで動きました。一番初めにも書きましたが、

  • コントローラクラスの引数に@RequestBodyをつける
  • ajaxでjsonを送信する時に、contentType="application/json"を指定する
  • jsonが配列であるオブジェクトは、JavaクラスではListにする

を守ることが大切でした。

まとめ

Springのjsonマッピングで配列の箇所がエラーになるときの対処法です。もし同じような悩みを持っている方がいらっしゃいましたら、この記事がお役に立てたら幸いです。最後までお読みいただきありがとうございました。

スポンサーリンク

-Java
-, , , ,

© 2024 教職志望だった文系エンジニア Powered by AFFINGER5