質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

2739閲覧

Spring Boot(STS4)で編集後に保存ができない

987654321

総合スコア28

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

1グッド

1クリップ

投稿2020/11/05 09:34

分からないこと

springを学習しており、自作でブログアプリを作っています。

記事作成をして、編集画面まで行けるのですが、保存ボタンを押すと下記のエラー文が出てきてしまい、保存ができません。

エラー文

java

1Whitelabel Error Page 2This application has no explicit mapping for /error, so you are seeing this as a fallback. 3 4Thu Nov 05 18:22:24 JST 2020 5There was an unexpected error (type=Method Not Allowed, status=405). 6Request method 'GET' not supported 7org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported 8 at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:213) 9 at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:422) 10 at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367) 11 at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:110) 12 at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:59) 13 at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:396) 14 at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1234) 15 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1016) 16 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) 17 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) 18 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) 19 at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) 20 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) 21 at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 22 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 23 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 24 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 25 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 26 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 27 at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) 28 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 29 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 30 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 31 at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) 32 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 33 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 34 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 35 at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94) 36 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 37 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 38 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 39 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) 40 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 41 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 42 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 43 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 44 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) 45 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) 46 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) 47 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 48 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) 49 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 50 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) 51 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 52 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 53 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) 54 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 55 at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 56 at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) 57 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 58 at java.base/java.lang.Thread.run(Thread.java:832)

コード

コントローラー

java

1package com.application.controller; 2 3import org.springframework.beans.factory.annotation. 4Autowired; 5import org.springframework.stereotype.Controller; 6import org.springframework.ui.Model; 7import org.springframework.web.bind.annotation.GetMapping; 8import org.springframework.web.bind.annotation.PostMapping; 9import com.application.models.BlogRepository; 10import com.application.models.Blog; 11import org.springframework.web.servlet.mvc.support. 12RedirectAttributes; 13import org.springframework.web.bind.annotation.PathVariable; 14import org.springframework.web.bind.annotation. 15PatchMapping; 16import org.springframework.web.bind.annotation. 17ModelAttribute; 18 19@Controller 20public class BlogController { 21 22 private BlogRepository rep; 23 24 @Autowired 25 public BlogController(BlogRepository rep) { 26 this.rep = rep; 27 } 28 29 @GetMapping("/") 30 public String toppage(Model model) { 31// model.addAttribute("message", "トップページです"); 32 return "toppage"; 33 } 34 35 @GetMapping("/list") 36 public String list(Model model) { 37 model.addAttribute("blogs", rep.findAll()); 38 return "list"; 39 } 40 41 @GetMapping("/create") 42 public String create(@ModelAttribute Blog blog, Model model) { 43 return "create"; 44 } 45 46 @PostMapping("/save") 47 public String save(@ModelAttribute Blog blog, RedirectAttributes attrs) { 48 rep.save(blog); 49 attrs.addFlashAttribute("success", "データの登録に成功しました"); 50 return "redirect:/list"; 51 } 52 53 @GetMapping("/show/{id}") 54 public String show(@PathVariable int id, Model model) { 55 Blog b = rep.findById(id).get(); 56 model.addAttribute("blog", b); 57 return "show"; 58 } 59 60 @GetMapping("/edit/{id}") 61 public String edit(@PathVariable int id, Model model) { 62 Blog b = rep.findById(id).get(); 63 model.addAttribute("blog", b); 64 return "edit"; 65 } 66 67 @PatchMapping("/update/{id}") 68 public String update(@PathVariable int id, @ModelAttribute Blog blog, Model model, RedirectAttributes attrs) { 69 blog.setId(id); 70 rep.save(blog); 71 attrs.addFlashAttribute("success", "データの更新に成功しました。"); 72 return "redirect:/list"; 73 } 74 75}

HTML

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5<link th:href="@{/css/style.css}" rel="stylesheet"/> 6<title>記事作成</title> 7</head> 8<body> 9 <header th:replace="/parts/parts :: common-header"></header> 10 <div class="main"> 11 <div class="contents-wrapper"> 12 <div class="contents-title"> 13 <h1>ブログ編集</h1> 14 </div> 15 <div class="contents"> 16 <form method="patch" th:action="@{/update/{id}(id=${blog.id})}" th:object="${blog}"> 17 <div> 18 <label for="title">タイトル</label> 19 <input type="text" th:field="*{title}"> 20 </div> 21 <div> 22 <label for="content">本文</label> 23 <input type="text" th:field="*{content}"> 24 </div> 25 <input type="submit" value="送信"> 26 </form> 27 </div> 28 </div> 29 </div> 30</body> 31</html>

参考書にGETやPOST以外のメソッドを使用するには。application.propertiesにspring.mvc.hiddenmethod.filter.enabled=true
を記載する必要があると書いてあったので、記載してます。

お分かりになる方がいらっしゃいましたら、ご教授いただければと思います。

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/11/05 10:13

application.propertiesの内容も提示してください。 また、「参考書」と「自身の環境」のバージョン合ってますか? 結局はGETだと認識されているのは間違いないわけですから。 正しく認識されていないorその設定は自身の環境では使えない 可能性を疑いましょう。
987654321

2020/11/05 11:16

``` spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:first-application spring.datasource.username=user spring.datasource.password=password spring.datasource.sql-script-encoding=UTF-8 spring.datasource.initialization-mode=always spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.mvc.hiddenmethod.filter.enabled=true ``` aplication.propertiesは上記の通りです。 参考書に書いてあるアプリケーションは作成できたので、環境の問題ではないと思います
m.ts10806

2020/11/05 22:37

>参考書に書いてあるアプリケーションは作成できた あ、いやそういうことじゃなくて。 Springのバージョン違えばちょっとしたことで機能が使えなかったりするので、合わせるべきと言う話で(Javaとかに限らず全てに言えます)
guest

回答1

0

ベストアンサー

HTMLのmethodはGETとPOSTのみ許可されていますが、Thymeleafの属性では指定できるようになっています。

html

1<form th:action="....." th:method="patch" .... >

そのうえで、SpringBoot 2.2以降では spring.mvc.hiddenmethod.filter.enabled=true を記述します。(デフォルトがfalseになりました)

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes#httphiddenmethodfilter-disabled-by-default

投稿2020/11/05 13:14

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

987654321

2020/11/05 14:28

ご回答ありがとうございます。 method="patch"にthを付けたら正常に動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問