我有这样的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"
我认为映射的产生部分应该已修复。
当我删除ajax调用的“ contentType”时,我没有得到406错误,但是在URLEncoded中却得到了jsonData参数。不,我认为我可以解码,但是我认为那不是“正确的”。
那么,如何在ajax调用中将非URL编码的JSON发送给没有contentType:“ application / json”的控制器?
或如何设置控制器响应的contentType?
最佳答案
Spring是负责发送406的一方。The Spring reference documentation和JavaDoc将有助于对此有所了解。
从参考文档中:
[关于Produces字段]仅当Accept request标头匹配这些值之一时,该请求才会被匹配。
如果将正确的Accept request header (sec 14.1)(application / json的值; charset = UTF-8值)添加到ajax请求中,我希望您不再获得406 HTTP状态代码。