我有一个Spring MVC Web应用程序,我有以下Web服务。
@RequestMapping(value = "/newBill", method = RequestMethod.POST)
public @ResponseBody ModelMap acceptNewBill(@ModelAttribute ("Bill") Bill newBill ){
Bill bill = new Bill();
bill.setTableName(newBill.getTableName());
bill.setRoom(newBill.getRoom());
bill.setCovers(newBill.getCovers());
ModelMap model = new ModelMap();
model.put("status", true);
return model;
}
以下脚本执行前端功能。
$('.done').click(function(){
var jsonObject = createJSON(".newBill");
jQuery.ajax({
url: "/newBill",
type: "POST",
data: {bill: JSON.stringify(jsonObject) },
dataType: "json",
beforeSend: function(x) {
if (x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
success: function(result) {
alert('sadgsd');
}
});
});
function createJSON(elementToConvert) {
jsonObj = [];
$( elementToConvert + " input").each(function() {
var id = $(this).attr("class");
var email = $(this).val();
item = {}
item [id] = email;
jsonObj.push(item);
});
return jsonObj;
}
上面的createJSON函数遍历提供的html元素并将值放入对象中! click函数执行POST,Post包含以下数据。
bill [{"tableName":"326432"},{"room":"3462346"},{"covers":"3426234"}]
现在,当我调试并检查服务时,来自前端的数据不会映射到参数中。我检查了变量名是否与POST相同。他们是一样的!但是这些值没有被映射!任何人都可以帮我解决这个问题。
更新:
我将服务方法更改为GET并将值作为URL变量传递。然后它被映射到服务参数中。问题出在POST中。
答案 0 :(得分:0)
不使用控制器中的@ModelAttribute
,而是使用@RequestBody
:
public @ResponseBody ModelMap acceptNewBill(@RequestBody Bill newBill) {
在ajax调用中,将内容类型设置为application/json
并将整个对象字符串化而不仅仅是数组:
jQuery.ajax({
url: "/newBill",
type: "POST",
data: JSON.stringify({bill: jsonObject}),
dataType: "application/json",
beforeSend: function(x) {
if (x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
success: function(result) {
alert('sadgsd');
}
});