Spring Boot - Request method 'POST' not supported (Method not allowed)
Solution 1
I found the problem. My pom.xml was wrong. The right one looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-handling-form-submission</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
Solution 2
I copied your exact same classes except the web security class and tried to run. The post method is working for me. The only change I made was returning file names without the .html
extension.
My controller class looks like this
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.example.models.Information;
@Controller
@RequestMapping(value = "/info")
public class InformationController {
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String infoForm(Model model) {
model.addAttribute("information", new Information());
return "infoForm";
}
@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String infoSubmit(@ModelAttribute Information information) {
return "infoResult";
}
}
KnechtRootrecht
Updated on June 04, 2022Comments
-
KnechtRootrecht almost 2 years
As I followed this tutorial: https://spring.io/guides/gs/handling-form-submission/ after a while I came to a dead end. I tried to figure out what the problem is for some hours now. I hope you can help me.
When I submit my form, I get this error-message:
There was an unexpected error (type=Method Not Allowed, status=405). Request method 'POST' not supported
My App (App.java):
package de.poc.logging.main; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
My Controller (InformationController.java):
package de.poc.logging.main; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping(value = "/info") public class InformationController { @RequestMapping(method = RequestMethod.GET, produces = "text/html") public String infoForm(Model model) { model.addAttribute("information", new Information()); return "infoForm.html"; } @RequestMapping(method = RequestMethod.POST, produces = "text/html") public String infoSubmit(@ModelAttribute Information information) { return "infoResult.html"; } }
I created an additional class for security (WebSecurityConf.java):
package de.poc.logging.main.config; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.headers() .frameOptions().sameOrigin() .httpStrictTransportSecurity().disable(); http.csrf().disable(); } }
And I have following two HTML-Files:
infoForm.html:
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Getting Started: Handling Form Submission</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <h1>Form</h1> <form action="#" th:action="@{/info}" th:object="${information}" method="post"> <p>Id: <input type="text" th:field="*{id}"/></p> <p>Message: <input type="text" th:field="*{content}"/></p> <p><input type="submit" value="Submit"/> <input type="reset" value="Reset"/></p> <!--<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>--> </form> </body> </html>
infoResult.html:
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Getting Started: Handling Form Submission</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <h1>Result</h1> <p th:text="'id: ' + ${information.id}"/> <p th:text="'content: ' + ${information.content}"/> <a href="/info">Submit another message</a> </body> </html>
Edit (additional information): my Information.java:
package de.poc.logging.main; public class Information { private long id; private String content; public long getId() { return id; } public String getContent() { return content; } public void setId(long id) { this.id = id; } public void setContent(String content) { this.content = content; } }
my pom-dependencies:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <version>1.5.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>1.5.2.RELEASE</version> </dependency> </dependencies>
I'm using Java 1.8u121 (jdk).
Edit2: I tried 3 different versions of spring boot now. Also I downloaded the project from here: https://github.com/spring-guides/gs-handling-form-submission and added spring boot via pom.xml. The downloaded project does not work for me.
I'm getting really frustrated.