実現したいこと
petProfiles.htmlに貼った新規ウチの子追加情報ページが開けるようにしたいです。
発生している問題・分からないこと
petProfiels.htmlは開けるのですが。http://localhost8080にアクセスした際、Getにて。
petProfiles.htmlに貼ったa要素リンクの新規ウチの子追加情報に遷移をしようとすると
Whitelabel Error Page
が出てしまいます。
エラーメッセージ
error
1Whitelabel Error Page 2This application has no explicit mapping for /error, so you are seeing this as a fallback. 3There was an unexpected error (type=Internal Server Error, status=500).
該当のソースコード
petProfiles.html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Pet Profiles</title> 6</head> 7<body> 8 <h1>Pet Profiles</h1> 9 <table> 10 <thead> 11 <tr> 12 <th>ID</th> 13 <th>Type</th> 14 <th>Name</th> 15 <th>Height</th> 16 <th>Weight</th> 17 <th>Blood Type</th> 18 <th>Likes</th> 19 <th>Care Remarks</th> 20 </tr> 21 22 </thead> 23 <tbody> 24 <tr th:each="petProfile : ${petProfiles}"> 25 <td th:text="${petProfile.id}"></td> 26 <td th:text="${petProfile.type}"></td> 27 <td th:text="${petProfile.name}"></td> 28 <td th:text="${petProfile.height}"></td> 29 <td th:text="${petProfile.weight}"></td> 30 <td th:text="${petProfile.bloodType}"></td> 31 <td th:text="${petProfile.likes}"></td> 32 <td th:text="${petProfile.careRemarks}"></td> 33 </tr> 34 </tbody> 35 </table> 36 <!-- 新規ペット情報追加ページへのリンク --> 37 <a th:href="@{/showNewPetinfoForm}"><!--<a href="/showNewPetinfoForm">-->新規ウチの子情報追加</a> 38 39</body> 40</html>
insertPetInformation.html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>InsertPetInformation</title> 6</head> 7<body> 8 <h1>新しいウチの子情報</h1> 9 <!--action="#"--> 10 <form th:action="@{/addPetProfile}" th:object="${petProfile}" method="post"> 11 <!-- ペットIDは編集しないので、非表示の入力欄で送信します --> 12 <input type="hidden" th:field="*{id}"> 13 <!-- ラベルと入力欄(input要素)の組を作ります --> 14 <label for="type">種類</label> 15 <input type="text" th:field="*{type}" id="type"> 16 <!-- ラベルと入力欄(input要素)の組を作ります --> 17 <label for="name">名前</label> 18 <input type="text" th:field="*{name}" id="name"> 19 <!-- ラベルと入力欄(input要素)の組を作ります --> 20 <label for="height">体長</label> 21 <input type="number" th:field="*{height}" id="height"> 22 <!-- ラベルと入力欄(input要素)の組を作ります --> 23 <label for="weight">体重</label> 24 <input type="number" th:field="*{weight}" id="weight"> 25 <!-- ラベルと入力欄(input要素)の組を作ります --> 26 <label for="bloodType">血液型</label> 27 <input type="text" th:field="*{bloodType}" id="bloodType"> 28 <!-- ラベルと入力欄(textarea要素)の組を作ります --> 29 <label for="likes">好きなもの</label> 30 <textarea name="likes" th:field="{likes}" id="likes"></textarea> 31 <!-- ラベルと入力欄(input要素)の組を作ります --> 32 <label for="care_remarks">飼い方</label> 33 <input type="text" th:field="*{care_remarks}" id="care_remarks"> 34 <input type="submit" value="登録"> 35 </form> 36 <!--ウチの子一覧ページへのリンク --> 37 <a th:href="@{/}">一覧ページに戻る</a> 38 39</body> 40</html>
PetProfileController.java
1package com.example.pet; 2 3import com.example.pet.entity.PetProfile; 4import com.example.pet.PetProfileService; 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Controller; 7import org.springframework.ui.Model; 8import org.springframework.web.bind.annotation.GetMapping; 9import org.springframework.web.bind.annotation.PostMapping; 10import org.springframework.web.bind.annotation.RequestMapping; 11import org.springframework.web.bind.annotation.ModelAttribute; 12 13import java.util.List; 14 15//@RequestMapping("") 16@Controller 17public class PetProfileController { 18 19 private final PetProfileService petProfileService; 20 21 @Autowired 22 public PetProfileController(PetProfileService petProfileService) { 23 this.petProfileService = petProfileService; 24 } 25 26 @RequestMapping("/") 27 public String getAllPetProfiles(Model model) { 28 List<PetProfile> petProfiles = petProfileService.getAllPetProfiles();// selectAll();// 29 model.addAttribute("petProfiles", petProfiles); 30 return "petProfiles"; 31 } 32 33 // ペット情報を新しく作るための画面にアクセスしたときの処理を書きます。 34 @GetMapping("/showNewPetinfoForm") 35 public String showNewPetinfoForm(Model model) { 36 // 新しいペット情報を作ります。 37 PetProfile PetProfile = new PetProfile(); 38 // 新しいペット情報を画面(ビュー)に渡します。 39 model.addAttribute("PetProfile", PetProfile); 40 // ペット情報を新しく作る画面('insertPetInformation')を表示します。 41 return "insertPetInformation"; 42 } 43 44 @PostMapping("/addPetProfile") 45 public String addPetProfile(@ModelAttribute("petProfile") PetProfile petProfile) { 46 petProfileService.createPetProfile(petProfile); // 新しいペット情報をデータベースに保存する処理 47 return "redirect:/"; // リダイレクトしてペット情報の一覧ページに戻る 48 } 49 50}
PetProfile.java
1package com.example.pet.entity; 2 3import jakarta.persistence.Entity; 4import jakarta.persistence.GeneratedValue; 5import jakarta.persistence.GenerationType; 6import jakarta.persistence.Id; 7 8@Entity 9public class PetProfile { 10 11 @Id 12 @GeneratedValue(strategy = GenerationType.IDENTITY) 13 private int id; 14 15 private String type; 16 private String name; 17 private float height; // floatに修正 18 private float weight; // floatに修正 19 private String bloodType; 20 private String likes; 21 private String careRemarks; 22 23 // コンストラクタ、ゲッター、セッターは省略 24 25 // デフォルトコンストラクタ 26 public PetProfile() { 27 } 28 29 // フルコンストラクタ 30 public PetProfile(String type, String name, float height, float weight, String bloodType, String likes, 31 String careRemarks) { 32 this.type = type; 33 this.name = name; 34 this.height = height; 35 this.weight = weight; 36 this.bloodType = bloodType; 37 this.likes = likes; 38 this.careRemarks = careRemarks; 39 } 40 41 // ゲッターとセッター 42 public int getId() { 43 return id; 44 } 45 46 public void setId(int id) { 47 this.id = id; 48 } 49 50 public String getType() { 51 return type; 52 } 53 54 public void setType(String type) { 55 this.type = type; 56 } 57 58 public String getName() { 59 return name; 60 } 61 62 public void setName(String name) { 63 this.name = name; 64 } 65 66 public float getHeight() { 67 return height; 68 } 69 70 public void setHeight(float height) { 71 this.height = height; 72 } 73 74 public float getWeight() { 75 return weight; 76 } 77 78 public void setWeight(float weight) { 79 this.weight = weight; 80 } 81 82 public String getBloodType() { 83 return bloodType; 84 } 85 86 public void setBloodType(String bloodType) { 87 this.bloodType = bloodType; 88 } 89 90 public String getLikes() { 91 return likes; 92 } 93 94 public void setLikes(String likes) { 95 this.likes = likes; 96 } 97 98 public String getCareRemarks() { 99 return careRemarks; 100 } 101 102 public void setCareRemarks(String careRemarks) { 103 this.careRemarks = careRemarks; 104 } 105 106 @Override 107 public String toString() { 108 return "PetProfile{" + 109 "id=" + id + 110 ", type='" + type + '\'' + 111 ", name='" + name + '\'' + 112 ", height=" + height + 113 ", weight=" + weight + 114 ", bloodType='" + bloodType + '\'' + 115 ", likes='" + likes + '\'' + 116 ", careRemarks='" + careRemarks + '\'' + 117 '}'; 118 } 119}
PetProfileService.java
1package com.example.pet; 2 3import com.example.pet.entity.PetProfile; 4import com.example.pet.PetProfileRepository; 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7import org.springframework.transaction.annotation.Transactional; 8 9import java.util.List; 10import java.util.Optional; 11 12@Service 13public class PetProfileService { 14 @Autowired 15 private PetProfileRepository petProfileRepository; 16 17 public List<PetProfile> getAllPetProfiles() { 18 return petProfileRepository.findAll(); 19 } 20 21 public Optional<PetProfile> getPetProfileById(Long id) { 22 return petProfileRepository.findById(id); 23 } 24 25 @Transactional 26 public PetProfile createPetProfile(PetProfile petProfile) { 27 return petProfileRepository.save(petProfile); 28 } 29 30 public void deletePetProfile(Long id) { 31 petProfileRepository.deleteById(id); 32 } 33}
試したこと・調べたこと
上記の詳細・結果
teratailにて、whitelabelErrorPageを調べました。コントローラーのマッピングをする際に、idがあるものは分けるやhtmlのa要素の中身がth: href形式にしないといけないといった内容は見ていました。また、petProfiles.htmlに埋め込んだa要素とコントローラーのマッピングが命名にずれが生じていたので統一しました。ただ、自身のエラーは500エラーであり、情報になかなかたどり着けないというのが現状です。
補足
特になし
0 コメント