minami1
@minami1

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

'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

1Answer

@RequestMapping(method = RequestMethod.POST)

にパスが指定されていないので有効になっていないのでは?

0Like

Comments

  1. @minami1

    Questioner

    パスを指定したところ表示されました。
    ありがとうございました!

Your answer might help someone💌