$.ajax()传递参数后台controller接收不到的问题

我想通过Ajax传递一个Pojo给Controller,但是controller接收不到数据

    下面是Ajax代码片

 $.ajax({
        url: basePath + "update.action",
        method:"post",
        dataType:"json",
        contentType: "application/json",
        data:JSON.stringify({
            cookId: $("#edit_cook_id").val,
            cookName: $("#edit_cookName").val,
            cookFlavor: $("#edit_cookFlavor").val,
            cookRepertory: $("#edit_cookRepertory").val,
            cookPrice: $("#edit_cookPrice").val,
            cookType: $("#edit_cookType").val
        }),
        success: function (data) {
            if (data > "0") {
                alert("客户信息更新成功!");
            } else {
                alert("客户信息更新失败!");
            }
            window.location.reload();
        },
        error:function () {
            alert("客户信息更新失败! ");
        }
    });

接下来是Controller

@RequestMapping(value = {"update"} ,method = { RequestMethod.POST })
@ResponseBody
public Long update(@RequestBody CookBook cookBook) {

    System.out.println("==============================================");
    System.out.println(cookBook);

    Long aLong = restaurantService.updateCook(cookBook);
    return aLong;
}

这是打印语句

CookBook{cookId=0, cookName='null', cookFlavor='null', cookRepertory=0, cookPrice=0, cookType='null'}

异常是说
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE cook_id = 0' at line 4

找了一天问题了,苦恼

这个是说你的sql(数据库)查询语句有语法问题,看你发的问题是和前段有关,应该是你没明白错误报告的含义吧。
你可以把'where cook_id = 0' _所在的那一句截图发上来,我给你看看语法错误,或者直接放到数据库里去执行以下试试

  $.ajax({
        url: basePath + "update.action",
        method:"post",
        dataType:"json",
        data:{
           "cookId": $("#edit_cook_id").val,
           "cookName": $("#edit_cookName").val,
            "cookFlavor": $("#edit_cookFlavor").val,
            "cookRepertory": $("#edit_cookRepertory").val,
            "cookPrice": $("#edit_cookPrice").val,
            "cookType": $("#edit_cookType").val
        },
        success: function (data) {
            if (data > "0") {
                alert("客户信息更新成功!");
            } else {
                alert("客户信息更新失败!");
            }
            window.location.reload();
        },
        error:function () {
            alert("客户信息更新失败! ");
        }
    });

改成这样试试看。

不行啊,图片说明

根据你这个错误提示,问题可能不在你的ajax,程序都是从上往下执行的,你看看在你的ajax回调之前的执行的,或者直接看你的后台文件的第四行

https://blog.csdn.net/zylwendao/article/details/79074665

错误说的是你sql语法错误,老是关心前端的问题干嘛?

 data:JSON.stringify({
            cookId: $("#edit_cook_id").val,
            cookName: $("#edit_cookName").val,
            cookFlavor: $("#edit_cookFlavor").val,
            cookRepertory: $("#edit_cookRepertory").val,
            cookPrice: $("#edit_cookPrice").val,
            cookType: $("#edit_cookType").val
        }),

改成

data:{
            "cookId": $("#edit_cook_id").val(),
            "cookName": $("#edit_cookName").val(),
            "cookFlavor": $("#edit_cookFlavor").val(),
            "cookRepertory": $("#edit_cookRepertory").val(),
            "cookPrice": $("#edit_cookPrice").val(),
            "cookType": $("#edit_cookType").val()
        },

1、后台接口实际上没有接收到对象参数,有0的值是因为参数自己初始化了一个对象出来。
2、sql报错是因为你执行sql语句的值是初始化出来对象的值,所以根本问题还是在对象参数没有接收到值。
3、修改data传值拼接方式,val方法后面记得加(),能调试或者打印的话,最好把data里的值打印出来看下是不是都有值。

success里返回的data是long型,不能与"0"比较,应该是与0比较