将JSON发送到Spring Controller时出现406错误

时间:2016-03-31 01:26:22

标签: javascript jquery json ajax spring

我有一个像这样的jQuery ajax调用:

            $.ajax({
            type: "post",
            url: url,
            data: JSON.stringify(formSubmit),
            contentType: "application/json",
            dataType: "json",
            success: function(xhr,status) {
                console.log("Return Data:"+xhr.responseText)
            });

我的控制器看起来像这样:

@RequestMapping(value = "/doIt", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
@ResponseBody 
public MyObject activityPerformed(HttpServletRequest request, HttpServletResponse response,  @RequestBody String jsonData) {
    logger.debug("JSON INPUT:"+jsonData);
    MyObject o = new MyObject("STUFF");
    return o;
}

这会引发406错误。我可以在浏览器中看到我的响应标题中有这个:

Content-Type:"text/html;charset=utf-8"

我认为映射的生成部分应该已修复。

当我删除" contentType"对于ajax调用,我没有得到406错误,而是URLEncoded中的jsonData参数。不,我认为我可以做一个解码,但我认为,这不是"对"。

那么如何在没有contentType的情况下将非URL编码的JSON发送到控制器:" application / json"在ajax电话中?

或者如何设置控制器响应的contentType?

1 个答案:

答案 0 :(得分:0)

春天是负责发回406的一方。The Spring reference documentationJavaDoc将有助于揭示这一点。

参考文献:

  

[关于生成字段] 仅当Accept请求标头与其中一个值匹配时,才会匹配请求。

如果您向ajax请求添加正确的Accept request header (sec 14.1) application / json; charset = UTF-8 的值),我希望您不再获得406 HTTP状态代码。