Spring,不支持请求方法“POST”[关闭]
Posted
技术标签:
【中文标题】Spring,不支持请求方法“POST”[关闭]【英文标题】:Spring,Request method 'POST' not supported [closed] 【发布时间】:2013-03-19 22:11:33 【问题描述】:首先说抱歉问这个重复的问题..
实际上在我的 spring 应用程序中,我有 user.jsp
和 professional.jsp
这是我的 User.jsp:
<form:form action="profile/user" modelAttribute="profile">
<div>
<jsp:include page="professional.jsp"></jsp:include>
</div>
</form:form>
这是我的专业.jsp:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<fieldset id="profile_proffiesional">
<form:form action="profile/proffiesional" modelAttribute="PROFESSIONAL" method="POST">
<p>
<label for="position">Position</label>
<form:input path="position" tabindex="4" />
</p>
<p>
<label for="location">Location</label>
<form:input path="location" tabindex="5" />
</p>
<p>
<label for="description">Description</label>
<form:input path="description" tabindex="5" />
</p>
<p>
<input type="submit" value="Add">
</p>
</form:form>
</fieldset>
这是我的控制器类:
@Controller
@RequestMapping(value = "profile")
public class UserProfileController
@Autowired
private UserService userService;
@Autowired
private SessionData sessionData;
@RequestMapping(value = "user", method = RequestMethod.GET)
public String user(Model model) throws Exception
model.addAttribute("PROFESSIONAL", new UserProfessionalForm());
model.addAttribute("EDUCATIONAL", new UserEducationalForm());
model.addAttribute("AWARDS", new UserAwardsForm());
return "profile/user";
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(UserProfessionalForm professionalForm,
BindingResult result, Model model)
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
Problem
是当我们点击professional.jsp
中的Add
按钮时,服务器控制台没有响应但显示以下警告消息:
29 Mar, 2013 1:03:51 PM org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported
为什么会出现这个警告?我已经指定了method="POST"..
请帮忙..
【问题讨论】:
【参考方案1】:我在我的 sprint 安全 xml 文件中启用了 csrf,所以我只在表单中添加了一行:
<input type="hidden" name="$_csrf.parameterName" value="$_csrf.token" />
这样我就可以提交具有model
属性的表单。
【讨论】:
或者我确实可以使用 get 方法发送返回 ModelAndView 函数。【参考方案2】:你的 user.jsp:
<form:form action="profile/proffesional" modelAttribute="PROFESSIONAL">
---
---
</form:form>
在你的控制器类中:
(将其作为一个有意义的完整方法名称。听说我认为您在 DB 中插入记录。)
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String proffessionalDetails(
@ModelAttribute UserProfessionalForm professionalForm,
BindingResult result, Model model)
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("PROFESSIONAL", professionalForm);
return "Your Professional Details Updated";
【讨论】:
【参考方案3】:在 Jsp 中:
action="profile/proffiesional"
在控制器中
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
拼写错误!
【讨论】:
再次发出此警告:2013 年 3 月 29 日下午 1:37:32 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported 警告:不支持请求方法“POST” 我做了这么多……我不敢说。哈哈【参考方案4】:您是 forgotPassword
方法中 UserProfessionalForm professionalForm
参数的错误 @ModelAttribute
注释。
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(@ModelAttribute UserProfessionalForm professionalForm,
BindingResult result, Model model)
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
【讨论】:
再次发出此警告:2013 年 3 月 29 日下午 1:37:32 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported 警告:不支持请求方法“POST”。跨度> 【参考方案5】:试试这个
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(@ModelAttribute("PROFESSIONAL") UserProfessionalForm professionalForm,
BindingResult result, Model model)
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
【讨论】:
No.. 再次发出警告,但是 .. 复制相同的代码并进行教育(上面的代码我在模型属性中包含 EducationalForm)..所以在那个时候工作完美..但专业不工作 也像这样 /professional 在 proffessional 的 fromt 中加上一个斜线【参考方案6】:有关信息,我删除了 action 属性,当我调用 ajax 帖子时出现此错误..即使我在表单中的 action 属性看起来像这样 action="javascript://;"
我以为我从 ajax 调用和序列化表单中得到了它,但我再次将虚拟操作属性添加到表单中并且它起作用了。
【讨论】:
以上是关于Spring,不支持请求方法“POST”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
错误 405 请求方法 'POST' 不支持 Spring Security
HTTP状态405 - 不支持请求方法'POST' - Spring Security
Spring MVC HTTP 状态 405 - 不支持请求方法“POST”