riku__02
@riku__02

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Spring boot勉強中での質問

※ログインボタン押下後の実装は7章で実施していました。
現時点では6章実施中なのでスキップします。

解決したいこと

Spring解体新書という書籍で6章部分を実施中です。

ログイン画面からのログインボタンを押下するとエラーが発生しています。
解決方法を教えて下さい。
image.png
本来はレイアウトは以下のようになるのが正解です。
image.png

発生している問題・エラー

There was an unexpected error (type=Method Not Allowed, status=405).
Method 'POST' is not supported.
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' is not supported
	at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:267)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:441)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:382)
	at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:127)
	at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:68)
	at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:507)
	at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1284)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1065)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)

該当するソースコード

■login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<meta>
<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/login/login.css}">
<!--JS読込-->
<script th:src="@{webjars/jquery/jquery.min.js}" defer></script>
<script th:src="@{webjars/bootstrap/css/bootstrap.min.js}" defer></script>
<title>ログイン</title>
</head>

<body class="bg-light">
	<div class="text-center">
		<form method="post" th:action="@{/login}" class="form-login">
			<h2>ログイン</h2>
			<!--ユーザID-->
			<div class="form-group">
				<label for="userId" class="sr-only">userId</label>
				<input type="text" class="form-control" placeholder="ユーザーID" name="userId">
			</div>
			<!--パスワード-->
			<div class="form-group">
				<label for="password" class="sr-only">password</label>
				<input type="text" class="form-control" placeholder="パスワード" name="password">
			</div>
			<input type="submit" value="ログイン" class="btn btn-primary"/>
		</form>
		<a th:href="@{/user/signup}">新規登録はこちら</a>
	</div>
</body>
■LoginController.java
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class LoginController {
	
	/*ログイン画面を表示*/
	@GetMapping("/login")
	public String getLogin() {
		return "login/login";
	}
}

自分で試したこと

本通りに構造や、ソースは記載できていると思っていますが解決できていません。。
アドバイス頂けるとありがたいです。よろしくおねがいします。
image.png
image.png

0

2Answer

ログインボタンを押した際のポストリクエストを受け入れる処理が書かれていないように見受けられます。

LoginController@PostMappingで関連付けたメソッドが必要ではないでしょうか?

「本通りに構造や、ソースは記載できている」とありますが、参考にしている書籍の情報や今進めているページ数の情報などもあると親切かもしれません。

追記

画像1枚目のログインボタンを押したあとに画像2枚目のログイン画面に遷移したいという意図の質問だったでしょうか?

0Like

Comments

  1. @riku__02

    Questioner

    @h_kono0707 さんコメントありがとうございます。
    わかりづらくすいません。。教えていただいたようにLoginControllerに@PostMappingで関連付けたメソッドが必要だなと思いました。しかし今自分が実施している章ではここまでせず後の章で実装していましたので私の勘違いでしたので一旦スキップします。
    また今後は参考にしている章の情報や現時点の情報等を記載します。

    追記に関してですが2枚目が正しいレイアウトなのですが、一枚目のように表示されています。htmlで修正すべき箇所のアドバイス頂けると嬉しいです。。
    よろしくお願いいたします

@riku__02 さん

本来はレイアウトは以下のようになるのが正解です。

ビルドツールはgradleのようですが、
build.gradleは今どういう状態ですか?

HTMLで気になった点について
image.png
@{webjars/となっている箇所がありますが、@{/webjars/が正しいと思います。

0Like

Your answer might help someone💌