2

更新开始

oooooops,我刚刚发现这不是 get & post 问题,而是 SpringMVC RequestMapping & trailing slash & http 302 问题。

当调用/editor get-request 时,302返回,响应位置是/editor/

/编辑网络

回复详情

如果我更改@RequestMapping("editor")EditorController@RequestMapping("anyWords")那么一切正常。

在此处输入图像描述

所以问题是为什么在正常工作@RequestMapping("editor")时会有斜杠问题@RequestMapping("anyWords")

更新结束

我只是想调用一个简单的 ajax-post 请求,但被奇怪的行为弄糊涂了。

我声明了 ajax 类型:“post”,但如果我不给 url 一个“/”后缀,如“/editor”而不是“/editor/”,结果将始终是“get”请求。

是否必须在“发布”请求中添加“/”后缀?

这是一些conf和代码

SpringMVC 控制器

@Controller
@RequestMapping("/editor")
public class EditorController {

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView getEditor() {       
        return new ModelAndView("/WEB-INF/editor.jsp");
    }

    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public String saveEditor(Article article) {
        // some code
        return "something";
    }
}

js函数调用ajax请求

MyShare.editor = {
    checkAndSubmit : function(){
        var title = $("#title").val();
        var author = $("#author").val();
        $.ajax({
            url : "/editor/",
            // problem here, without a '/' suffix,
            // it will always call a get request.
            // url : "/editor"
            type : "POST",  
            data : {
                'title' : title,
                'author' : author
            },
            success : function(response){
                 // some code
            },
            error : function(response){
                // some code
            }
        }); 

    }
};

tomcat 插件

<plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat6-maven-plugin</artifactId>
            <version>2.0-beta-1</version>
            <configuration>
                <url>http://localhost:8080/manager/html</url>
                <server>tomcat-local</server>
                <path>/</path>
                <contextReloadable>true</contextReloadable>
            </configuration>
        </plugin>
    </plugins>

我没有 10 个信誉来发布网络图像... :( 当我调用 js 函数时,它首先调用具有 code302 状态的 post 请求,然后调用具有 code200 状态的 get 请求,例如以下文字

name    method  status  type        initiator
editor  POST    302     Pending     jquery-2.0.3.js:7845
editor/ GET     200     text/html   http://localhost:8080/editor

我刚刚创建了另一个测试控制器,一切正常。我的意思是没有“/”后缀,仍然可以调用 ajax-post 请求。

任何人都知道 EditorController 和 TestController 之间的区别

@Controller
@RequestMapping("/test")
public class TestController {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String get(String title) {
        return "get : " + title;
    }

    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public String post(String title) {
        return "post" + title;
    }
}
4

0 回答 0