前提・実現したいこと
https://www.sys-link.jp/technical/SpringBoot/SpringBoot4-1.html
上記のサイトを参考にして、Springbootで開発中。(第4章部分)
実行は問題なくできるが、POST時に404エラーが出るので、このエラーを解消したいですが、
やり方に行き詰まっている状態です。すみませんが、ご教示いただければと思います。
具体的にエラー出る箇所は2点です。
①新規登録画面(new.hetml)に遷移し、文字を入力し登録ボタンを押した時。
②メイン画面(list.hetml)で削除ボタンを押した時。
発生している問題・エラーメッセージ
エラーメッセージ
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Thu Aug 26 16:54:12 JST 2021 There was an unexpected error (type=Not Found, status=404). No message available
DemoController.java
package com.example.demo.controller; import java.util.List; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import com.example.demo.entity.User; import com.example.demo.repository.UserRepository; @Controller public class DemoController { @Autowired UserRepository repository; @GetMapping() public String list(Model model) { List<User> list = repository.findAll(); model.addAttribute("data",list); return "users/list"; } @GetMapping("/add") public String add(Model model) { User data = new User(); model.addAttribute("formModel",data); return "users/new"; } @GetMapping("/edit") public String edit(@RequestParam int id,Model model){ User data = repository.findById(id); model.addAttribute("formModel",data); return "users/new"; } @PostMapping @Transactional(readOnly = false) public String save ( @ModelAttribute("formModel") User user){ repository.saveAndFlush(user); return "redirect:users/list"; } @PostMapping("/delete") @Transactional(readOnly = false) public String delete(@RequestParam int id) { repository.deleteById(id); return "redirect:users/list"; } @PostConstruct public void unit() { User user1 = new User(); user1.setName("satoshi"); user1.setAddress("大阪"); user1.setTel("123456789"); repository.saveAndFlush(user1); User user2 = new User(); user2.setName("koji"); user2.setAddress("東京"); user2.setTel("123456789"); repository.saveAndFlush(user2); } }
User.java
package com.example.demo.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter @Table(name= "user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column private int id; @Column private String name; @Column private String address; @Column private String tel; }
UserRepository.java
package com.example.demo.repository; import org.springframework.data.jpa.repository.JpaRepository; import com.example.demo.entity.User; public interface UserRepository extends JpaRepository<User,Long> { public User findById(int id); public void deleteById(int id); }
list.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Users List</title> <style> table { border-collapse: collapse; } .col_name {width: 100px;} .col_address {width: 500px;} .col_tel {width: 200px;} </style> </head> <body> <h1>住所録</h1> <table border="1"> <tr> <th class="col_name">名前</th> <th class="col_address">住所</th> <th class="col_tel">電話番号</th> <th></th> <th></th> </tr> <tr th:each="obj : ${data}"> <td th:text="${obj.name}"></td> <td th:text="${obj.address}"></td> <td th:text="${obj.tel}"></td> <td> <form action="/edit" method="get"> <input type="submit" value="編集"> <input type="hidden" name="id" th:value="${obj.id}"> </form> </td> <td> <form action="/delete" method="post"> <input type="submit" value="削除"> <input type="hidden" name="id" th:value="${obj.id}"> </form> </td> </tr> </table> <hr> <form action="/add"> <input type="submit" value="新規追加" /> </form> </body> </html>
new.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> table { border-collapse: collapse; } .col_name {width:200px;} .col_data {width:400px;} form {display: inline;} </style> </head> <body> <h1>住所録登録</h1> <form method="post" action="/create" th:object="${formModel}"> <input type="hidden" name="id" th:value="*{id}"> <table border="1"> <tr> <th class="col_name">名前</th> <td class="col_data"> <input type="text" name="name" th:value="*{name}" size="20" maxlength= "20" /> </td> </tr> <tr> <th>住所</th> <td> <input type="text" name="address" th:value="*{address}" size="40" maxlength="40" /> </td> </tr> <tr> <th>電話番号</th> <td> <input type="text" name="tel" th:value="*{tel}" size="15" maxlength= "15" /> </td> </tr> </table> <hr> <input type="submit" value="登 録" /> </form> <form action="/"> <input type="submit" value="戻 る" /> </form> </body> </html>
### 試したこと ①POST時に問題が発生しているので、htmlと見比べながら、controller部分を確認していましたが、 エラーになるような部分は見つけれませんでした。 ②入力した文字を登録する際の文字の受け渡しに問題があると思い、JpaRepositoryのデータの型を longからIntegerなどに変更しましたが根本的な解決にはなりませんでした。 ### 補足情報(FW/ツールのバージョンなど) SpringBootTool4 バージョン:SpringBoot2.2.0.RELEASE(gradle) テンプレートエンジン:Thymeleaf
回答2件
あなたの回答
tips
プレビュー