Javascriptのajax処理を使用して、Spring BootのControllerへJSONデータを送信する方法をご紹介します。送信するJSONデータは、List が含まれているものです。
本記事は次の記事からの応用になります。基本から押さえたい方は次の記事をご参照ください。
ajaxからSpring BootのControllerへJSONを送信する方法(シンプルなモデル編)
ajaxからSpring BootのControllerへJSONを送信する方法をご紹介します。
このようなサンプルプログラム...
動作
今回は次のようなサンプルを作成しました。ボタンをクリックするとjavascriptでjsonを生成してControllerへ送信処理が実行されます。

実行したときの挙動です。

取得できていることが確認できました。
ディレクトリ構成
最終的な開発環境のフォルダ構成です。

ソースコード
ソースコードです。
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>JSON TEST</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/script.js"></script>
</head>
<body>
<form>
<input type="button" id="test" value="test">
</form>
</body>
</html>
前回からの変更はありません。ボタンがあるだけのシンプルな画面です。
script.js
$(function() {
$("#test").on("click", function() {
var model = {
"no" : "1",
"name" : "1",
"favorite" : [ {
"use" : "movie",
"time" : "120m"
}, {
"use" : "voise",
"time" : "5m"
} ]
};
console.log(model);
console.log(JSON.stringify(model));
$.ajax({
url : '/',
type : 'POST',
data : JSON.stringify(model),
contentType : 'application/json',
error : function() {
console.log("error");
},
success : function() {
console.log("success");
}
});
});
});
生成するjsonは配列にします。モデルクラスの構成に合わせてjsonを作成します。
JsonController.java
package com.demo.app.controller;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class JsonController {
@GetMapping(value = "/")
public ModelAndView index(HttpServletResponse response, ModelAndView mav) {
mav.setViewName("index");
return mav;
}
@PostMapping("/")
public ModelAndView postIndex(HttpServletResponse response, @RequestBody JsonModel model, ModelAndView mav) {
mav.setViewName("index");
return mav;
}
}
こちらは前回からの変更はありません。
JsonModel.java
package com.demo.app.controller;
import java.util.List;
import lombok.Data;
@Data
public class JsonModel {
private String no;
private String name;
private List<Favorite> favorite;
}
Controller側で受け付けるデータ(モデル)です。List型を含んだモデルにしました。
Favorite.java
package com.demo.app.controller;
import lombok.Data;
@Data
public class Favorite {
private String use;
private String time;
}
List型の中身です。