【发布时间】:2016-03-31 01:26:22
【问题描述】:
我有一个这样的 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?
【问题讨论】:
-
您检查过服务器安全日志吗?当请求违反 mod_security 规则时,Apache 会生成错误。所以可能不是你的 jsonData 请求导致了错误。
-
我使用的是tomcat 8.0.30
-
另一个与您的设置有相同问题的人:stackoverflow.com/questions/7462202/…。我不确定您的设置是什么,但这可能有助于引导您找到错误的来源,以便您知道要提供哪些详细信息。他们没有使用与您相同的请求标头,但答案可能会告诉您前进的方向。
标签: javascript jquery json ajax spring