我正在尝试使用jQuery ajax调用向我的Spring MVC控制器“ BaseController”中的方法“ foo_insert_udpate”发送JSON字符串。服务器是从Eclipse会话中启动的本地主机。
index.jsp --------
function popupFoo_update_submit() {
aRowData = $('#form_popupFoo_update').serializeArray();
var sRowData = JSON.stringify( aRowData);
console.log( "sRowData is ", sRowData);
$.ajax({
url: 'foo_insert_update',
type: "post",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: sRowData,
success: function( response) {
console.log( response);
$('#fooTable').row( this).data( response).draw( false);
},
error: function( e) {
console.log(e);
alert( "Error on update: " + e.message)
}
});
}
BaseController -----
@RequestMapping(value="foo_insert_update", method = RequestMethod.POST)
public @ResponseBody String fooUpdateHandler( @RequestParam String json_InnString)
{
logger.info("entering fooUpdateHandler with " + json_InnString);
String json_OutString = null;
// do stuff to populate json_OutString
logger.info("exiting fooUpdateHandler with " + json_OutString);
return json_OutString;
}
执行js函数,并填充sRowData并触发ajax调用,结果是执行了ajax的错误块,并且e.messsage未定义,并且在日志文件中查看发现fooUpdateHandler从未输入而我的chrome调试器的“控制台”标签显示该帖子返回了400错误。
关于如何a)修复和/或b)进一步调试的任何想法?
TIA,
code_warrior
答案 0 :(得分:0)
尝试这种简化的方法实现:
@RequestMapping(value="/foo_insert_update", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String fooUpdateHandler(@RequestBody String json) {
return json;
}
... @RequestParam
批注只能用于将URL参数映射到带注释的方法参数,例如http://www.google.de?q=searchphrase(q是一个值为'searchparam'的请求参数)-您要映射一个将在HTTP请求正文中发送的JSON对象...因此,您必须使用Spring的{{1} }注释!
答案 1 :(得分:0)
解决方案是将contextPath添加到ajax调用的网址中
url: '${pageContext.request.contextPath}/foo_insert_update',
感谢所有答复!
关闭案例
code_warrior