所以我收到警告
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";
}
}
那我该怎么办?另外,如果需要其他任何代码,请评论我将编辑帖子, 谢谢。
答案 0 :(得分:0)
问题出在代码内的注释@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";
}
}
答案 1 :(得分:0)
由于您的GET
处理程序映射为/registration
,因此将您的POST
处理程序映射更改为相同的值:
@RequestMapping(value = "/registration", method = RequestMethod.POST)
答案 2 :(得分:0)
我通过在向服务器发出Ajax请求时仅添加spring文档中提到的csrf配置来解决了我的问题。请记住,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}" />
答案 3 :(得分:0)
对于那些我们有相关问题的人,当我使用带有空格而不是 @RequestBody 的 @PathVariable 发帖时遇到了这个问题