0

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

4

1 回答 1

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');
    }
});
于 2013-04-26T14:59:01.933 回答