'POST'をサポートさせたい
解決したいこと
検索機能を追加しているのですが、エラーが出てしまうので解決したいです。
発生している問題・エラー
Method 'POST' is not supported.
該当するソースコード
package com.example.demo.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.dto.UserRequest;
import com.example.demo.dto.UserUpdateRequest;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
/**
* ユーザー情報 Controller
*/
@Controller
public class UserController {
/**
* ユーザー情報 Service
*/
@Autowired
private UserService userService;
/**
* ユーザー情報一覧画面を表示
* @param model Model
* @return ユーザー情報一覧画面
*/
@RequestMapping(value = "/user/list", method = RequestMethod.GET)
public String displayList(Model model) {
List<User> userlist = userService.searchAll();
model.addAttribute("userlist", userlist);
return "user/list";
}
// 検索機能
private static final String VIEW = "/user/list";
@RequestMapping(method = RequestMethod.POST)
public ModelAndView login(ModelAndView mav, @RequestParam("name") String name) {
mav.setViewName(VIEW);
mav.addObject("name", name);
List<User> userlist = userService.search(name);
mav.addObject("userlist", userlist);
mav.addObject("resultSize", userlist.size());
return mav;
}
/**
* ユーザー新規登録画面を表示
* @param model Model
* @return ユーザー情報一覧画面
*/
@GetMapping(value = "/user/add")
public String displayAdd(Model model) {
model.addAttribute("userRequest", new UserRequest());
return "user/add";
}
/**
* ユーザー新規登録
* @param userRequest リクエストデータ
* @param model Model
* @return ユーザー情報一覧画面
*/
@RequestMapping(value = "/user/create", method = RequestMethod.POST)
public String create(@Validated @ModelAttribute UserRequest userRequest, BindingResult result, Model model) {
if (result.hasErrors()) {
// 入力チェックエラーの場合
List<String> errorList = new ArrayList<String>();
for (ObjectError error : result.getAllErrors()) {
errorList.add(error.getDefaultMessage());
}
model.addAttribute("validationError", errorList);
return "user/add";
}
// ユーザー情報の登録
userService.create(userRequest);
return "redirect:/user/list";
}
/**
* ユーザー情報詳細画面を表示
* @param id 表示するユーザーID
* @param model Model
* @return ユーザー情報詳細画面
*/
@GetMapping("/user/{id}")
public String displayView(@PathVariable Long id, Model model) {
User user = userService.findById(id);
model.addAttribute("userData", user);
return "user/view";
}
/**
* ユーザー編集画面を表示
* @param id 表示するユーザーID
* @param model Model
* @return ユーザー編集画面
*/
@GetMapping("/user/{id}/edit")
public String displayEdit(@PathVariable Long id, Model model) {
User user = userService.findById(id);
UserUpdateRequest userUpdateRequest = new UserUpdateRequest();
userUpdateRequest.setId(user.getId());
userUpdateRequest.setName(user.getName());
userUpdateRequest.setNameKana(user.getNameKana());
userUpdateRequest.setAddress(user.getAddress());
userUpdateRequest.setJoinDay(user.getJoinDay());
userUpdateRequest.setGender(user.getGender());
userUpdateRequest.setBirthday(user.getBirthday());
userUpdateRequest.setPhone(user.getPhone());
userUpdateRequest.setEmployment(user.getEmployment());
userUpdateRequest.setRemarks(user.getRemarks());
model.addAttribute("userUpdateRequest", userUpdateRequest);
return "user/edit";
}
/**
* ユーザー更新
* @param userRequest リクエストデータ
* @param model Model
* @return ユーザー情報詳細画面
*/
@RequestMapping(value = "/user/update", method = RequestMethod.POST)
public String update(@Validated @ModelAttribute UserUpdateRequest userUpdateRequest, BindingResult result,
Model model) {
if (result.hasErrors()) {
List<String> errorList = new ArrayList<String>();
for (ObjectError error : result.getAllErrors()) {
errorList.add(error.getDefaultMessage());
}
model.addAttribute("validationError", errorList);
return "user/edit";
}
// ユーザー情報の更新
userService.update(userUpdateRequest);
return String.format("redirect:/user/%d", userUpdateRequest.getId());
}
/**
* ユーザー情報削除
* @param id 表示するユーザーID
* @param model Model
* @return ユーザー情報詳細画面
*/
@GetMapping("/user/{id}/delete")
public String delete(@PathVariable Long id, Model model) {
// ユーザー情報の削除
userService.delete(id);
return "redirect:/user/list";
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head th:replace="common/head :: head_fragment(title = 'ユーザー情報一覧', scripts = ~{::script}, links = ~{::link})"></head>
<body>
<div class="container">
<h1>ユーザー情報一覧</h1>
<div class="float-end">
<a th:href="@{/login}" class="btn btn-primary">ログアウトはこちら</a>
<a th:href="@{/user/add}" class="btn btn-primary">新規登録はこちら</a>
</div>
<table class="table table-striped">
<thead>
<form method="post" name="form">
名前 : <input type="text" id="name" name="name" th:value="${name}"/>
<input type="submit" value="検索"/>
</form>
<tr>
<th>ID</th>
<th>名前</th>
<th>性別</th>
<th>更新日時</th>
<th>登録日時</th>
<th></th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${userlist}" th:object="${user}" class="align-middle">
<td th:text="*{id}"></td>
<td th:text="*{name}"></td>
<td th:text="*{getGenderItems().get('__*{gender}__')}"></td>
<td th:text="${#dates.format(user.updateDate, 'yyyy/MM/dd')}"></td>
<td th:text="${#dates.format(user.createDate, 'yyyy/MM/dd')}"></td>
<td>
<a th:href="@{/user/{id}(id=*{id})}" class="btn btn-secondary">詳細</a>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
自分で試したこと
調べながら設計したのですができなかったので教えてほしいです。
0