spring mvc ajax 400解决

The request sent by the client was syntactically incorrect.

ajax发起请求时报400错误。请求代码如下:

var reportId=($(obj).parent().parent().parent().children(":first").attr("value"));
            var isChecked=$(obj).prop("checked")=="checked"?1:0;
            var reportSetting=$(obj).attr("value");
            var setting={reportId:reportId,isChecked:isChecked,reportSetting:reportSetting};
            console.log(JSON.stringify(setting));
            $.ajax({
                type: "POST",
                url: "/reportConfiguration",
                contentType:"application/json",
                data:JSON.stringify(setting),
                dataType: "json",
                success: function (msg) {
                    if (msg.isSuccess){
                        $("#msg").html("设置成功")
                    }else{
                        $("#msg").html(msg.result);
                    }
                }
            });

服务端代码:

@RequestMapping("/reportConfiguration")
    @ResponseBody
    public String reportSet(@RequestBody ReportSettingEditBean reportSettingEditBean,HttpServletRequest request){
        return "";
    }

bean定义:

public class ReportSettingEditBean {
    private long reportId;

    private boolean isChecked;

    private ReportSetting reportSetting;

    public long getReportId() {
        return reportId;
    }

    public void setReportId(long reportId) {
        this.reportId = reportId;
    }

    public boolean isChecked() {
        return isChecked;
    }

    public void setChecked(boolean isChecked) {
        this.isChecked = isChecked;
    }

    public ReportSetting getReportSetting() {
        return reportSetting;
    }

    public void setReportSetting(ReportSetting reportSetting) {
        this.reportSetting = reportSetting;
    }
}

public enum ReportSetting {
    Fixed(1),
    Scroll(2),
    First(4);

    private int value;

    public int getValue() {
        return value;
    }

    ReportSetting(int value){
        this.value=value;
    }
}

解决:

在js中核对数据类型与接收数据类中属性的数据类型是否一致。

上例中:ReportSetting 是枚举对象, 而var reportSetting=$(obj).attr("value") 是字符串。修改成整数即可。正确请求如下:

var reportId=($(obj).parent().parent().parent().children(":first").attr("value"));
            var isChecked=$(obj).prop("checked")=="checked"?1:0;
            var reportSetting=parseInt($(obj).attr("value"));
            var setting={reportId:reportId,isChecked:isChecked,reportSetting:reportSetting};
            $.ajax({
                type: "POST",
                url: "/reportConfiguration",
                contentType:"application/json",
                data:JSON.stringify(setting),
                dataType: "json",
                success: function (msg) {
                    if (msg.isSuccess){
                        $("#msg").html("设置成功")
                    }else{
                        $("#msg").html(msg.result);
                    }
                }
            });

 

posted @ 2015-03-06 17:26  tyb1222  阅读(3031)  评论(0编辑  收藏  举报