通过Ajax POST将JSON对象映射到Spring MVC模型

时间:2015-12-23 07:43:08

标签: jquery json ajax spring

你好朋友我正在解决这个问题2天但无法解决。我希望stackoverflow可以帮助我。

问题:我已经通过ajax发送了JSON对象,在后端我有一个类(名为:SalesCommandObject),其中包含其他模型,getter和setter的对象。 然后尝试将类型为“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//
}

1 个答案:

答案 0 :(得分:0)

朋友们我已经解决了这个问题:

我没有在模型中声明默认构造函数,这就是我通过ajax发送的数据类型与接收端控制器参数中的数据类型不匹配的原因。另外pom.xml中的jackson版本设置不正确。 必须牢记的几件事情是: Json对象的键值必须与设置的方法名称匹配: 例如,如果:Json data is {"key1":"value","keyTwo":"value123"}      然后是二传手:

setKey1(){} setKeyTwo(){}

在所有使用的模型类中也必须有公共默认构造函数,我们将在其中映射我们的json数据。

谢谢。