如何解决“org.springframework.web.HttpRequestMethodNotS

2019-10-31 07:45发布

所以我得到一个警告,如

 WARN  [org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver] (default task-2) Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported] 

当我去到以下网址http://localhost:8080/ProjectFE/uregistration和网站展示

HTTP 405不允许的方法

这里是我的控制器代码:

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import model.daoimpl.UserinfoDaoImpl;
import model.dao.IUserinfoDAO;
import model.entity.Userinfo;

@Controller
public class RegistrationController {
    @RequestMapping(value="/registration",method = RequestMethod.GET)
    public String addRegistrationPage() {
        return "registrationpage";
    }
    @RequestMapping(value="/uregistration",method = RequestMethod.POST)
    public String addURegistrationPage(@ModelAttribute("User")Userinfo u) {
        IUserinfoDAO iu = new UserinfoDaoImpl();
        boolean b = iu.insertInfo(u);
        if(b)
            return "success";
        else
            return "registrationpage";
    }

}

所以我该怎么做 ? 此外,如果需要任何其他代码请评论我将修改后,三江源。

Answer 1:

问题是与注解@Controller你的代码中。 将其更改为@RestController ,它应该开始工作。 这是我所创建的示例代码和它工作得很好:

package com.sample;

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

@RestController
public class Sample {
@RequestMapping(value="/registration",method = RequestMethod.GET)
public String addRegistrationPage() {
    return "registrationpage";
}
@RequestMapping(value="/uregistration",method = RequestMethod.POST)
public String addURegistrationPage(@RequestBody String u) {

    boolean b = true;
    if (b)
        return "success";
    else
        return "registra";
}

}


Answer 2:

当你的GET处理程序映射/registration ,更改POST处理程序映射到相同的值:

@RequestMapping(value = "/registration", method = RequestMethod.POST)


Answer 3:

我通过使AJAX请求到服务器时作为弹簧文档中提到简单地增加跨站请求伪造配置解决矿。 请记住,CSRF默认情况下,在春天启用,你必须禁用它(坏)或启用它。 链接在这里

https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/csrf.html

所以我加<meta name="_csrf" th:content="${_csrf.token}" /> <meta name="_csrf_header" th:content="${_csrf.headerName}" />

<script type="application/x-javascript">
   (function () {
       var token = $("meta[name='_csrf']").attr("content");
       var header = $("meta[name='_csrf_header']").attr("content");
       $(document).ajaxSend(function(e, xhr, options) {
          xhr.setRequestHeader(header, token);
       });
   });
</script>

我的HTML头和表单内我提出,我包括这一点隐藏的输入和矿山为我工作。 希望它可以帮助你。

<input type="hidden" th:name="${_csrf.parameterName}"
                        th:value="${_csrf.token}" />


文章来源: How to fix “org.springframework.web.HttpRequestMethodNotSupportedException : Request method 'POST' not supported ?”