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); } } });