2013-04-26 41 views
0

我有一個Spring MVC Web應用程序,我有以下Web服務。Json數據未映射到後端服務

@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元素並將值放入一個對象中!點擊功能執行POST和Post包含以下數據。

bill [{"tableName":"326432"},{"room":"3462346"},{"covers":"3426234"}] 

現在,當我調試和檢查服務時,從前端去的數據沒有被映射到參數中。我檢查了變量名是否與POST相同。他們是一樣的!但值不映射!任何人都可以幫助我解決這個問題。

更新:

我改變了服務方法來獲取並傳遞一個值作爲一個URL變量。然後它被映射到服務參數中。問題出現在POST中。

回答

0

而是在你的控制器使用@RequestBody使用@ModelAttribute的:

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