Json Data未映射到后端服务中

时间:2013-04-26 11:42:55

标签: json web-services spring post spring-mvc

我有一个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中。

1 个答案:

答案 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');
    }
});