質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

6495閲覧

Springでデータベースにsaveできない

mimi_129

総合スコア63

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/08/29 14:49

前提・実現したいこと

SpringでPostgreSQLにデータをインサートしたいのですがエラーが出ます。
流れとしては、
edit

editCheck

finish
の順です。

エラーはeditCheckのsubmit押下時に発生します。

【対象のテーブル】
CREATE TABLE systemuser (
id SERIAL NOT NULL,
age INT,
name VARCHAR(20)
);

発生している問題・エラーメッセージ

java.lang.IllegalArgumentException: Target object must not be null

該当のソースコード

edit

1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8" /> 5<title>Hello Thymeleaf</title> 6</head> 7<body> 8 <h1 th:text="'edit'"></h1> 9 <form method="post" th:action="@{/form/editCheck}" th:object="${form}"> 10 <input type="text" name="name" th:field="*{name}"> 11 <input type="text" name="age" th:field="*{age}"> 12 <input type="submit" value="送信"> 13 </form> 14</body> 15</html>

editCheck

1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> 4<head> 5<meta charset="UTF-8" /> 6<title>Hello Thymeleaf</title> 7</head> 8<body> 9 <h1 th:text="'editCheck'"></h1> 10</body> 11 12<form method="post" th:action="@{/form/finish}" th:object="${form}"> 13 <input type="text" readonly class="form-control-plaintext" name="name" th:field="*{name}"> 14 <input type="text" readonly class="form-control-plaintext" name="age" th:field="*{age}"> 15 <input type="submit" value="送信"> 16</form> 17</html>

finish

1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8" /> 5<title>Hello Thymeleaf</title> 6</head> 7<body> 8 <h1 th:text="'finish'"></h1> 9 10 <a href="/">戻る</a> 11</body> 12</html>

form

1package com.example.demo; 2 3public class Form { 4 private String name; 5 private int age; 6 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 public int getAge() { 16 return age; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 23} 24

HelloController

1package com.example.demo; 2 3import java.util.List; 4 5import javax.servlet.http.HttpSession; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.stereotype.Controller; 9import org.springframework.ui.Model; 10import org.springframework.web.bind.annotation.ModelAttribute; 11import org.springframework.web.bind.annotation.PostMapping; 12import org.springframework.web.bind.annotation.RequestMapping; 13import org.springframework.web.bind.annotation.RequestMethod; 14 15@Controller 16public class HelloController { 17 18 @Autowired 19 private SystemUserService userService; 20 21 @RequestMapping(value = "/") 22 private String index() { 23 return "index"; 24 } 25 26 @RequestMapping(value = "/form/edit") 27 private String edit() { 28 return "/form/edit"; 29 } 30 31 @RequestMapping("/form/editCheck") 32 public String editCheck(@ModelAttribute("form") Form form) { 33 34 return "/form/editCheck"; 35 } 36 37 @PostMapping("/form/finish") 38 public String finish(Model model, HttpSession session, @ModelAttribute Form form) { 39 SystemUser sessionEditForm = (SystemUser) session.getAttribute("form"); 40 41 System.out.println(sessionEditForm); 42 43 this.userService.save(sessionEditForm); 44 45 return "/form/finish"; 46 } 47 48 @RequestMapping(value = "/test", method = RequestMethod.GET) 49 public List<SystemUser> test() { 50 return userService.findAll(); 51 } 52 53 @ModelAttribute 54 Form setupForm() { 55 return new Form(); 56 } 57 58} 59

SystemUser

1package com.example.demo; 2 3import javax.persistence.Column; 4import javax.persistence.Entity; 5import javax.persistence.GeneratedValue; 6import javax.persistence.GenerationType; 7import javax.persistence.Id; 8import javax.persistence.Table; 9 10 11 12@Entity 13@Table(name = "systemuser") 14public class SystemUser { 15 16 @Id 17 @GeneratedValue(strategy=GenerationType.IDENTITY) 18 @Column 19 private int id; 20 21 @Column 22 private String name; 23 24 @Column 25 private int age; 26 27 public int getId() { 28 return id; 29 } 30 public void setId(int id) { 31 this.id = id; 32 } 33 public String getName() { 34 return name; 35 } 36 public void setName(String name) { 37 this.name = name; 38 } 39 public int getAge() { 40 return age; 41 } 42 public void setAge(int age) { 43 this.age = age; 44 } 45 46} 47

SystemUserRepositry

1package com.example.demo; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 5import org.springframework.stereotype.Repository; 6 7@Repository 8public interface SystemUserRepository extends JpaRepository<SystemUser, Integer>, JpaSpecificationExecutor<SystemUser> { 9 10 11 12} 13

SystemUserService

1package com.example.demo; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7import org.springframework.transaction.annotation.Transactional; 8 9@Service 10@Transactional 11public class SystemUserService { 12 13 @Autowired 14 SystemUserRepository userRepositry; 15 16 public SystemUser save(SystemUser entity) { 17 18 return this.userRepositry.save(entity); 19 } 20 21 public List<SystemUser> findAll() { 22 return userRepositry.findAll(); 23 } 24 25} 26

試したこと

オブジェクトがnullと言われているのでformの受け渡しが上手くいっていない(?)とは思うのですが、どこが原因なのか分かりません。。
個人的に憶測ですが、finishメソッドの
SystemUser sessionEditForm = (SystemUser) session.getAttribute("form");
この部分でformが渡せていないのが原因だと思うのですが。。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

java

1HttpSessionsetAttribute("form", 格納するオブジェクト);

している箇所がないため、セッションには格納されていません。

ControllerのeditCheckにて、session.setAttribute("form", form); するか、ないしは、Controllerクラスの最下部である

java

1 @ModelAttribute 2 Form setupForm() { 3 return new Form(); 4 }

があまり正しい実装ではありません。formをセッションにて扱いたい場合は、HttpSessionを直接利用しても問題なく動作しますが、SPringMVCでは、Modelクラスで値を扱う際にはControllerクラスにて

@SessionAttributes("form")

と付与しておけば、各Controllerのメソッドにて、@ModelAttribute("form") Form form でセッションへ自動的に格納されます。
そして登録完了後は、formのクリア処理を行うべきです。
この時は、Controllerの引数に、SessionStatus status を追加することで、セッションに格納しておいたクラスを破棄できる status.setComplete(); を呼び出すだけになります。

投稿2020/08/30 03:45

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimi_129

2020/08/30 15:13

session.setAttribute("form", form); を追記して色々調整した結果、Insertできるようになりました! 大変ご丁寧にご回答いただきましてありがとうございました。 いただいた回答何度か読ませていただいてコード改善していきます。 本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問