スプリング解体新書(6章)を使って勉強をしているのですが、ユーザー登録画面の入力内容をログ出力したいのですがRequest method 'POST' not supportedというエラーが出てしまいます。
サンプル資料と見比べてもコードで間違ってるところが見当たりません。
色々検索して試してみましたが変わらずエラーが出てしまいます。
何が悪いのか教えて頂きたいです。
1. UserApplicationService.java
package com.example.demo.application.service; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.stereotype.Service; @Service public class UserApplicationService { @Autowired private MessageSource messageSource; /** 性別のMapを生成する */ public Map<String, Integer> getGenderMap(Locale locale) { Map<String, Integer> genderMap = new LinkedHashMap<>(); String male = messageSource.getMessage("male", null, locale); String female = messageSource.getMessage("female", null, locale); genderMap.put(male, 1); genderMap.put(female, 2); return genderMap; } }
2. LoginController.java
package com.example.demo.contoroller.java; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class LoginController { /** ログイン画面を表示 */ @GetMapping("/login") public String getLogin() { return "login/login"; } }
**3.SignupController.java **
package com.example.demo.contoroller.java; import java.util.Locale; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; 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.RequestMapping; import com.example.demo.application.service.UserApplicationService; import com.example.demo.form.SignupForm; import lombok.extern.slf4j.Slf4j; @Controller @RequestMapping("/user") @Slf4j public class SignupController { @Autowired private UserApplicationService userApplicationService; /** ユーザー登録画面を表示 */ @GetMapping("/signup") public String getSignup(Model model, Locale locale, @ModelAttribute SignupForm form) { // 性別を取得 Map<String, Integer> genderMap = userApplicationService.getGenderMap(locale); model.addAttribute("genderMap", genderMap); // ユーザー登録画面に遷移 return "user/signup"; } /** ユーザー登録処理 */ @PostMapping("/signup") public String postSignup(@ModelAttribute SignupForm form) { log.info(form.toString()); // ログイン画面にリダイレクト return "redirect:/login"; } }
4. SignupForm.java
package com.example.demo.form; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import lombok.Data; @Data public class SignupForm { private String userId; private String password; private String userName; @DateTimeFormat(pattern = "yyyy/MM/dd") private Date birthday; private Integer age; private Integer gender; }
5. signup.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"></meta> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- CSS読込 --> <link rel="stylesheet" th:href="@{/webjars/bootstrap/css/bootstrap.min.css}"> <link rel="stylesheet" th:href="@{/css/user/signup.css}"> <!-- JS読込 --> <script th:src="@{/webjars/jquery/jquery.min.js}" defer></script> <script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}" defer></script> <title th:text="#{user.signup.title}"></title> </head> <body class="bg-light"> <form id="signup-form" method="post" action="/user/signup" class="form-signup" th:object="${signupForm}"> <h1 class="text-center" th:text="#{user.signup.title}"></h1> <!-- ユーザーID --> <div class="form-group"> <label for="userId" th:text="#{userId}"></label> <input type="text" class="form-control" th:field="*{userId}"/> </div> <!-- パスワード --> <div class="form-group"> <label for="password" th:text="#{password}"></label> <input type="text" class="form-control" th:field="*{password}"/> </div> <!-- ユーザー名 --> <div class="form-group"> <label for="userName" th:text="#{userName}"></label> <input type="text" class="form-control" th:field="*{userName}"/> </div> <!-- 誕生日 --> <div class="form-group"> <label for="birthday" th:text="#{birthday}"></label> <input type="text" class="form-control" placeholder="yyyy/MM/dd" th:field="*{birthday}"/> </div> <!-- 年齢 --> <div class="form-group"> <label for="age" th:text="#{age}"></label> <input type="text" class="form-control" th:field="*{age}"/> </div> <!-- 性別 --> <div class="form-group"> <div th:each="item : ${genderMap}" class="form-check-inline"> <input type="radio" class="form-check-input" th:value="${item.value}" th:field="*{gender}"/> <label class="form-check-label" th:text="${item.key}"></label> </div> </div> <!-- 登録ボタン --> <input type="submit" th:value="#{user.signup.btn}" class="btn btn-primary w-100 mt-3" /> </form> </body> </html>
よろしくお願いします。
あなたの回答
tips
プレビュー