【问题标题】:Request method 'POST' not supported in Spring mvcSpring mvc 不支持请求方法“POST”
【发布时间】:2015-05-28 21:45:21
【问题描述】:

这是我的表格:

<form action="${pageContext.request.contextPath}/admin/editc" method="POST" id="editForm">
    <input type="text" name="username" class="form-control" />
    <input type="text" name="password" class="form-control" />
    <input type="submit" value="submit" >
</form>

这是我的控制器方法:

@RequestMapping(value = "/admin/edit", method = RequestMethod.GET)
public ModelAndView editPage() {

    ModelAndView model = new ModelAndView();
    model.addObject("title", "User edit Form - Database Interaction");
    model.addObject("message", "This page is for ROLE_ADMIN only!");
    model.setViewName("editpage");
    System.out.println("getting edit page");

    return model;

}


@RequestMapping(value = "/admin/editc", method = RequestMethod.POST)
public ModelAndView updateCredentials() {
//      System.out.println("Username= "+username+"  password= "+password);
     ModelAndView model = new ModelAndView();
    model.addObject("title", "Credential Edit Operation");
    model.addObject("message", "You are successfully updated your credentials");
    model.addObject("edited", "TRUE");
    model.setViewName("editpage");
    System.out.println("executed updateCredentials POST method");

    return model;

}

现在的问题是我在控制台中收到 405 错误,如下所示:

org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported
 WARNING: Request method 'POST' not supported

谁能帮我解决这个错误?

【问题讨论】:

  • 我在发布的代码中没有发现任何问题。还有其他事情出错了。很难说哪里可能是错的。要进一步调试,您的接听电话工作正常吗?如果是这样,当服务器启动时,它将吐出请求映射详细信息。检查映射是否绑定到控制器。

标签: spring-mvc httprequest httpresponse http-response-codes


【解决方案1】:

您的 java 方法的签名是错误的,您还需要添加您对 POST 的期望。查看此guide 以更正您的代码。

【讨论】:

  • 你的意思是 @ModelAttribute(...) 注释 @daniele 。我以前有过,当时不工作
  • 我的意思是 @damien 答案的相同签名,而且您应该为 GET 添加另一个处理程序。请注意,对于 POST 处理程序,您需要接受具有表单字段的类的参数
  • 将模型属性作为控制器方法的参数不一定正确。
  • 是的,我同意你@minion
【解决方案2】:

您首先需要一个 GET 方法来显示表单和一个 POST 来提交它。

@RequestMapping(value = "/admin/editc", method = RequestMethod.GET)
public ModelAndView updateCredentials() {
    return new ModelAndView("editPage");
}

@RequestMapping(value = "/admin/editc", method = RequestMethod.POST)
public ModelAndView updateCredentials(@ModelAttribute UserCredentials credentials) {
    someService.save(credentials);
    ...
}

【讨论】:

  • 嗨 @Damien 重新检查我有 Get 方法的问题。
  • 但是您的 post 方法不包含任何属性值。您的表单将尝试找到一个处理程序,该处理程序采用您的模式中的结构,例如在我的示例中 UserCredentials 对象将包含用户名和密码字符串字段。
  • 即使我添加了用户名和密码这意味着它不起作用然后我通过删除这些参数进行测试。
猜你喜欢
  • 1970-01-01
  • 2020-08-12
  • 2017-02-25
  • 2020-07-24
  • 2023-03-17
  • 2014-02-11
  • 1970-01-01
  • 2016-08-28
相关资源
最近更新 更多