You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ajax向Spring Boot控制器传递Java对象?400错误如何排查?

错误原因

  • 前端传参存在多余嵌套层级:构造ajax请求参数时,你将xpTableCriteria先后套入parameter对象和额外的{}中,最终提交的参数结构为parameter[xpTableCriteria][字段名],和后端需要的参数结构完全不匹配。
  • 后端注解使用错误:@RequestParam仅用于映射单个请求参数,无法直接绑定到自定义Java对象上,GET请求下要绑定自定义对象不需要加该注解。

修复方案

前端代码修改

直接将xpTableCriteria对象作为ajax的data参数传递,删除多余的嵌套:

function getTableData(){    
    var xpTableCriteria = {globalSearch: "test", columnsSearchCriteria: "test2"};
    $.ajax({
        type : 'GET',
        data : xpTableCriteria,
        dataType: 'json',
        url : 'all',
        success : function(result) {
            alert("OK");
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.responseText);
        }
    });     
}

后端控制器代码修改

删除方法参数前的@RequestParam注解即可:

@GetMapping(value = "/all")
@ResponseBody
public XpTableCriteria getAll(XpTableCriteria xpTableCriteria) {
    // 此处可正常获取到两个字段的赋值
    return xpTableCriteria;
}

可选扩展:如果要使用POST传JSON格式参数

如果后续需要提交更复杂的参数结构,可以改用POST请求,修改如下:

  1. 前端ajax修改type为POST,添加contentType: 'application/json',将data转为JSON字符串:
$.ajax({
    type : 'POST',
    data : JSON.stringify(xpTableCriteria),
    contentType: 'application/json',
    dataType: 'json',
    url : 'all',
    // 其余配置不变
})
  1. 后端将@GetMapping改为@PostMapping,参数前加@RequestBody注解:
@PostMapping(value = "/all")
@ResponseBody
public XpTableCriteria getAll(@RequestBody XpTableCriteria xpTableCriteria) {
    return xpTableCriteria;
}

内容的提问来源于stack exchange,提问作者Tharsant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:18:02