【SpringBoot】Stream(map)でMap<String,Object>をキャストしたい
Q&A
Closed
解決したいこと
SpringBootでタスク管理アプリを作成しています。
その中でユーザを登録し、その一覧をWebアプリ上に表示する機能を実装中にエラーが発生しました。
解決方法を教えてください。
発生している問題・エラー
class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')
該当するソースコード
TaskListDao.java
public List<User> find() {
String sql = "SELECT * FROM ACCOUNT";
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);
List<User> users = result.stream()
.map((Map<String, Object> row) -> new User(
(Integer) row.get("userId"),
row.get("userName").toString(),
(Integer) row.get("userAge")))
.toList();
return users;
}
HomeController.java
record User(Integer id,String name, Integer age) {}
Integer userId;
@GetMapping("/test")
public String test(@RequestParam("name") String name, @RequestParam("age") Integer age,Model model) {
userId = userId + 1;
User u = new User(userId,name,age);
dao.userAdd(u);
model.addAttribute("user_id", userId);
model.addAttribute("user_name", u.name());
model.addAttribute("user_age", u.age());
return "greeting";
}
@GetMapping("/greeting")
public String greeting(Model model) {
List<User> users = dao.find();
model.addAttribute("users",users);
return "greeting";
}
データベースにINSERTするところまではできていますが、登録したアカウントの一覧を出力をする際にのTaskListDaoクラスのMap内でObject型をInteger型にキャストしたところがエラーの原因と考えております。
自分で試したこと
1.公式ドキュメントを参照し、キャストできるメソッドを確認したが該当するものがなかった。
→ https://docs.oracle.com/javase/jp/8/docs/api/java/util/Map.html
2.キャストの記載方法の変更
型を変更
→Integerではなくintで受け取るよう変更(ダメもとです)
(int)((Integer) row.get("userId")).intValue(),
かなり初歩的な部分でつまづいてしまいましたが、
正直お手上げ状態です、、
みなさま、お力添えをお願いいたします。
0