不支持 Spring MVC 请求方法“POST”-> HTTP 405

Posted

技术标签:

【中文标题】不支持 Spring MVC 请求方法“POST”-> HTTP 405【英文标题】:Spring MVC Request method 'POST' not supported -> HTTP 405 【发布时间】:2020-07-24 06:44:24 【问题描述】:

卡住了大约 4 个小时,想知道 Spring MVC/thymeleaf 应用程序中的错误在哪里。 我的本地目标是在主页提交登录/通过表单后呈现 admin.html

控制器:

@Controller
public class HomeController 
        @GetMapping("/")
        public String getHome(Model m) 
            m.addAttribute( "user",new User());
            return "/home";
        
        @PostMapping("/")
        public String getSubmit(@ModelAttribute User user)

            return "/admin";
        

home.html:

  <form action="#" th:action="@/admin" th:object="$user" method="post">
            <p class="txt">Name: <input type="text" th:field="*name"/></p>
            <p class="txt">Password: <input type="text" th:field="*password"/></p>
            <p><input class="button" type="submit" value="Submit" />
                <input class="button" type="reset" value="Reset" /></p>
        </form >

用户类别:

@Data
@Entity
public class User 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;
    private String password;
    private boolean isAdmin;
    private String address;

所以我搜索了很多想法,从 pom.xml 中删除了 spring 安全性, 尝试将 @RequestedMapping 与 RequestMethod.PUT 一起使用,- 没办法,它不起作用。

【问题讨论】:

th:action="@/admin" - 重定向到 api -> /admin 并且您在控制器中没有该 api? 【参考方案1】:

您的表单引用th:action="@/admin" 作为目标。您的控制器不会映射/admin,而只会映射根/

您必须将目标更改为/

如果你想渲染一个模板/admin,那么你的回报是正确的。如果你想重定向到/admin,那么一个新的控制器可能会处理这个问题,所以你必须改写redirect:/admin

【讨论】:

更改目标不起作用。我写了 AdminController,但每次都添加新的 Controller 看起来很糟糕。还是谢谢!【参考方案2】:

你的控制器应该是这样的:

@Controller
public class HomeController 
    @GetMapping("/")
    public String getHome(Model m) 
        m.addAttribute("user", new User());
        return "/home";
    

    @PostMapping("/admin")
    public String getSubmit(User user)    
        return "/admin";
    

home.html 应该是这样的:

<form action="@/admin" th:object="$user" method="post">
    <p class="txt">Name: <input type="text" th:field="*name"/></p>
    <p class="txt">Password: <input type="text" th:field="*password"/></p>
    <p><input class="button" type="submit" value="Submit" />
    <input class="button" type="reset" value="Reset"/></p>
</form >

【讨论】:

以上是关于不支持 Spring MVC 请求方法“POST”-> HTTP 405的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 状态 405 - 不支持请求方法“POST”(Spring MVC)

不支持 Spring MVC 请求方法“POST”-> HTTP 405

已解决 [org.springframework.web.HttpRequestMethodNotSupportedException: 不支持请求方法'POST'] Spring MVC

405 在客户端请求命中 Spring MVC 中的拦截器之前不支持请求方法“GET”

Spring MVC过滤器-HiddenHttpMethodFilter

spring mvc 怎么设计缓存