我有一个像这样的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?
答案 0 :(得分:0)
春天是负责发回406的一方。The Spring reference documentation和JavaDoc将有助于揭示这一点。
参考文献:
[关于生成字段] 仅当Accept请求标头与其中一个值匹配时,才会匹配请求。
如果您向ajax请求添加正确的Accept request header (sec 14.1)( application / json; charset = UTF-8 的值),我希望您不再获得406 HTTP状态代码。