controller中入参是对象的情况下,ajax发送请求参数需要注意:
1、contentType=application/json时,发送的data需要转成字符串,JSON.stringify
2、contentType=application/x-www-form-urlencoded时,发送的data是对象。
代码:
1、contentType=application/json
$(function(){ $("#btn").click(function () { $.ajax({ url: "/mv/getData", type: "POST", contentType:"application/json;charset=utf-8", data:JSON.stringify({"name":"tom","price":"10.5","amount":"15"}), success:function (data) { console.log(data) $('#span1').text(JSON.stringify(data)) } }) }) });
2、contentType=application/x-www-form-urlencoded
$(function(){ $("#btn").click(function () { $.ajax({ url: "/mv/getData", type: "POST", contentType:"application/x-www-form-urlencoded;charset=utf-8", data:{"name":"tom","price":"10.5","amount":"15"}, success:function (data) { console.log(data) $('#span1').text(JSON.stringify(data)) } }) })});
注意:
$.post()默认用的是contentType=application/x-www-form-urlencoded
$.post(URL,data,function(data,status,xhr),dataType)
后端(以下总结基于SpringMVC):
@RequestMapping("getData")
public List<Product> getData(Product dto){
System.out.println(dto);
System.out.println(dto.getName()+","+dto.getAmount()+","+dto.getPrice());
}
当前端发送数据,
contentType=application/x-www-form-urlencoded时,后端可以直接用对象接收。
contentType=application/json时,后端需要用@RequestBody,如下:
@RequestMapping("getData")
public List<Product> getData(@RequestBody Product dto){
System.out.println(dto);
System.out.println(dto.getName()+","+dto.getAmount()+","+dto.getPrice());
}
总结:前端发送对象时,后端可以直接用对象接收;前端发送json字符串时,后端需要用@RequestBody。
联系客服