【问题标题】:Spring 3.1 Controller not accepting ajax postSpring 3.1 控制器不接受 ajax 发布
【发布时间】:2014-06-30 16:14:49
【问题描述】:

我正在使用 spring 3.1 MVC 创建一个 AJAX 表单。我很困惑,已经在互联网和 stackoverflow 上搜索了我的问题的解决方案,但到目前为止还没有成功。我也在使用 Tiles 2.2.2

我收到警告:不支持请求方法“POST”

控制器方法

    @RequestMapping(value="/createProject", method=RequestMethod.POST,headers ="Accept:*/*")
         public @ResponseBody Project createProject(@RequestBody Project project){
               try {
                  projectBusiness.createProject(project);
               } catch (Exception e) {
                  e.printStackTrace();
               }
          return project;
        }
   @RequestMapping(value="/createProject", method=RequestMethod.GET)
        public ModelAndView displayCreateProjectForm(){
        ModelAndView mav = new ModelAndView("createProject");
        mav.addObject("project", new Project());
        return mav;
    }

我的 JSP

   $(function() {

    var url = $('#myForm').attr('action'); //http://localhost:7001/ProjectPortfolioTracker/app/projects/createProject
    $('#submitForm').click(function(e){
        console.log("hello");
        e.preventDefault();
        var formData = $('#myForm').serialize();
        alert(formData);

        console.log('in form click');
        $.ajax({
            type: 'POST',
            url: url,
            data:formData,
            success: function(){
               alert('success');
            },error: function(){
                alert('failure');
            },
        }).done(function() {
        alert("ajax post completed"); 
    });

    });
});

<body>
    <h1>Create a Project</h1>
    <table>
        <form method="post" action="${pageContext.request.contextPath}/app/projects/createProject" id="myForm">
            <tr>
                <td>Description: </td><td><textarea id="description" name="description" ></textarea></td>
            </tr>
            <tr>
                <td>Category:</td>
                <td>
                    <select name="category">
                        <option value="marketing">Marketing</option>
                        <option value="sales">Sales</option>
                        <option value="accounting">Accounting</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Estimated Duration:(in days)</td><td><input id="durationSlider" type="range" min="1" max="90" step="1" value="1"/></td><td><input type="text" id="durationValue" name="estimatedduration" readonly/></td>
            </tr>
            <tr>
                <td>Estimated Cost:(in 100's of dollars)</td><td><input id="costSlider" type="range" min="1" max="500" step="1" value="1" /></td><td><input type="text" id="costValue" name="estimatedcost"readonly/></td>
            </tr>
            <tr>
                <td>Objective:</td><td><textarea id="objective" name="objective"></textarea></td>
            </tr>
            <tr>
                <td>Resources:</td><td><input id="resources" type="number" value="0" name="resources"/> </td>
            </tr>
            <tr>
                <td>Status:</td>
                <td>
                    <select name="status">
                        <option value="design">Design Stage</option>
                        <option value="working">Work in Progress</option>
                        <option value="finished">Finished</option>
                        <option value="publishing">Publishing</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Supports:</td><td><textarea id="supports" name="supports"></textarea></td>
            </tr>
            <tr>
                <td>ManagerID</td><td><input type="number" value="0" id="managerid" name="managerid"/></td>
            </tr>
            <tr>
                <td><button type="submit" id="submitForm">Submit</button></td>
            </tr>
        </form>
    </table>

我还应该提到我通过 ajax 获得了要发布的实际信息,但我没有以 ajax 方式处理控制器代码,这意味着我仍然在方法结束时返回视图,因为更改为使用 @ResponseBody @RequestBody 是问题开始发生的时候

请原谅我仍在学习的可怕格式。

【问题讨论】:

  • 当应用启动时,您是否在日志文件中看到任何提及无法为 POST 创建端点的内容?
  • 不,但我认为它的设置是由于以下信息:映射“{[/app/projects/createProject],methods=[POST],params=[],headers=[Accept:* /*],consumes=[],produces=[],custom=[]}" 到公共模型上。项目控制器.ProjectController.createProject(model.Project)
  • 我的建议是通过 AnnotationMethodHandlerAdapter 类(特别是“handle”方法)进行调试,看看发生了什么。
  • 看看你如何将 GET 和 POST 映射到 /createProject(我假设在 /ProjectPortfolioTracker/app/projects/createProject),你能进入 GET 版本好吗?如果是这样,那么我会在 POST 期间在客户端进行调试,以确保它访问了正确的 url。
  • GET 版本运行良好,据我所知,ajax 调用被发布到同一个 url,我在 url 变量中添加了一个 console.log,它应该是 /ProjectPortfolioTracker/应用程序/项目/createProject

标签: java jquery ajax spring


【解决方案1】:

所以问题是 @RequestMapping 的 Headers 参数它不喜欢 Accept:/ 当我将其更改为 Accept:"application/json" 时我认为它接受任何东西它开始正常工作感谢所有评论试图提供帮助的人

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多