2015-12-23 100 views
0

您好朋友,我從2天開始處理這個問題,但無法解決。我希望stackoverflow可以幫助我。通過Ajax POST將JSON對象映射到Spring MVC模型

問題:我已經通過ajax發送了JSON對象,在後端,我有一個包含其他模型對象的類(名爲:SalesCommandObject),這些對象是getters和setters。 然後嘗試將「SalesCommandObject」類型的JSON對象發送到控制器方法。這樣json數據就可以映射到模型數據中。

但服務器拋出錯誤:「400錯誤請求:客戶端發送的請求在語法上不正確」。

我發表了整個代碼。請檢查並幫助我。

//代碼爲Ajax POST:

var salesCommandObject = {}; 
     salesCommandObject.CustomerInfo = 
       { 
       "address1": "Address_1", 
       "city": "City", 
       "pin": "PIN" 
       }; 
     salesCommandObject.SalesModel = 
       { 
       "locality":'Loc1', 
       "shippingType":'Regular', 
       "shippingCost":20 
       }; 

       $.ajax 
       ({ 
        type: "POST", 
        dataType : 'json', 
        async : true,  
        url: "http://localhost:8080/OnlineStore/kmsg/grocery/SaveSalesOrder", 
        data : JSON.stringify(salesCommandObject), 
        contentType: "application/json; charset=utf-8" 
        }).done(function(data,type,xml) 
          { 
           alert("result"); 
           console.log(data); 
          }).fail(function() 
             { 
           alert("Something Bad Happened, Service failed"); 
          }) 

//控制器代碼接收JSON對象:

@RequestMapping(value = "/SaveSalesOrder", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE) 
    public @ResponseBody String SaveCustomerOrder(@RequestBody SalesCommandObject salesCommandObject) throws Exception 
    {  
     CustomerModel cust = salesCommandObject.getCustomerInfo(); 
     SalesModel sale = salesCommandObject.getLocality(); 
     System.out.println(cust.getAddress1()); 
     System.out.println(sale.getLocality()); 
     return "Success"; 
    } 

//類的代碼模型salesCommandObject

public class SalesCommandObject 
{ 
    private CustomerModel   CustomerInfo = new CustomerModel(); 
    private List<SalesItemsModel> salesData ; 
    private SalesModel    salesModel = new SalesModel(); 
    private SalesDeliverySlotsModel salesDelSlotsModel = new SalesDeliverySlotsModel(); 
    private List<ItemsForSaleModel> itemsforSale ; 


     // getters and setters here// 
} 

回答

0

我的朋友已經解決了這個問題:

我還沒有聲明模型中的默認構造函數,這就是爲什麼通過ajax發送的數據類型與接收端的控制器參數中的數據類型不匹配。此外,pom.xml中的jackson版本設置不正確。 必須牢記事情很少是: 的JSON對象的關鍵值必須設定方法名稱相匹配: 例如,如果:Json data is {"key1":"value","keyTwo":"value123"} 然後制定者:

setKey1(){} setKeyTwo(){ }

此外,在所有使用的模型類中都必須有public默認構造函數,我們將在其中映射我們的json數據。

謝謝。

+0

數據「locality」:'Loc1'是否被映射? –

+0

是的,我的朋友單引號或雙引號不會打擾json太多,如果數據是一個變量,那麼兩個都將被視爲字符串數據,那麼你不必提供任何報價。 – RishiPandey

+0

您可以發佈您的模型類的詳細信息:「客戶信息」和「銷售模式」 –