ajax post to spring mvc附加“=”符号来请求数据

时间:2014-02-26 06:08:05

标签: javascript jquery ajax spring-mvc

我试图通过ajax帖子将数据发布到spring控制器。我的ajax代码是

function postData(tag){
console.debug(tag);

var targetUrl = "/add/tag";
$.ajax({
    url : targetUrl,
    type : "POST",
    data : tag,
    dataType : "text",
    success : function(response){
        console.debug(response);
    },
    error : function(){
        console.debug("error : ".concat(response));
    }
});
}

我的控制器代码是

@RequestMapping(value = "/add/tag", method = POST, consumes = { "application/json" },headers = "content-type=application/x-www-form-urlencoded")
@ResponseBody
public Integer addTag(HttpServletRequest request,
    @PathVariable("uid") String gatheringUid, @RequestBody String tag) {
    System.out.print(tag);
    return gatheringService.updateGathering(gatheringUid, tags);
}

在服务器端,它打印附加了“=”符号的标签的值,而在firebug控制台上的值打印为我输入。

例如,当我发布数据“test”时,在firebug控制台上打印“test”,在服务器端控制台上打印“test =”。

任何人都可以告诉我这里有什么问题。

提前致谢, 问候。

2 个答案:

答案 0 :(得分:5)

这是AJAX发送内容类型为application/x-www-form-urlencoded的POST的结果。

Spring使用StringHttpMessageConverter来解析绑定到@RequestBody带注释的String参数的参数。在内部,这将检查请求是否为表单POST。如果是,它会将整个身体反序列化,就好像它是一个表单提交一样。在这种情况下,单个单词text看起来好像是,例如,没有值的单个<input>元素,即。 text=

如果您感到好奇,可以在ServletServerHttpRequest#getBodyFromServletRequestParameters(..)中完成。

将您的内容类型更改为更合适的内容,可能是text/plain。不要使用dataType。使用contentTypeheaders

答案 1 :(得分:0)

FYI,根据Sotirios的回答,以下代码在Ajax jQuery代码中起作用。

     $.ajax({
            type : "post",
            dataType : 'json', 
            contentType : 'text/plain', // This was added to delete the =
            url : 'myURL',  
            data : id
     })