你好朋友我正在解决这个问题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//
}
答案 0 :(得分:0)
朋友们我已经解决了这个问题:
我没有在模型中声明默认构造函数,这就是我通过ajax发送的数据类型与接收端控制器参数中的数据类型不匹配的原因。另外pom.xml中的jackson版本设置不正确。
必须牢记的几件事情是:
Json对象的键值必须与设置的方法名称匹配:
例如,如果:Json data is {"key1":"value","keyTwo":"value123"}
然后是二传手:
setKey1(){} setKeyTwo(){}
在所有使用的模型类中也必须有公共默认构造函数,我们将在其中映射我们的json数据。
谢谢。