【问题标题】:Spring,Request method 'POST' not supported [closed]Spring,不支持请求方法“POST”[关闭]
【发布时间】:2013-03-19 22:11:33
【问题描述】:

首先说抱歉问这个重复的问题..

实际上在我的 spring 应用程序中,我有 user.jspprofessional.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"..

请帮忙..

【问题讨论】:

    标签: java spring jsp 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 调用和序列化表单中得到了它,但我再次将虚拟操作属性添加到表单中并且它起作用了。

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 2016-09-13
        • 1970-01-01
        • 2018-06-03
        • 2015-05-28
        • 2014-06-10
        • 2020-03-31
        • 2016-02-21
        相关资源
        最近更新 更多