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

Spring DELETE接口报Bad Request:List参数ids不存在如何解决

问题原因
  1. 前后端传参结构不匹配
    前端传递的是包裹了ids字段的对象{ids: [1,2,3]},但后端@RequestBody直接声明接收List<Long>类型,Spring会将请求体JSON的根节点当做列表解析,找不到对应结构就会抛出参数不存在的错误。
  2. 前端未将请求参数序列化为JSON字符串
    直接把JS对象传给$.ajax的data参数时,jQuery默认会将对象转换为表单键值对格式,就算声明了contentType也不会自动转JSON,后端无法正确解析。
  3. dataType参数配置错误
    $.ajax的dataType是指定期望后端返回的数据类型,合法值为json、xml、html等,你填写的application/json是MIME类型,属于非法配置,可能触发请求异常。
解决方案

两种方案二选一即可:

方案一:修改前端传参适配现有后端接口

前端直接传递数组作为JSON根节点,无需包裹ids字段,同时修正参数序列化和配置项:

var ids = [1,2,3];
$.ajax({
    type: 'DELETE',
    url: _host + '/delete',
    data: JSON.stringify(ids), // 直接序列化数组为JSON字符串
    contentType: 'application/json; charset=utf-8',
    dataType: 'json', // 修正dataType配置
    async: false,
    success: function (result) {                        
    }
});

后端原有代码不需要修改。

方案二:修改后端接收结构适配现有前端传参

后端新增接收参数的结构,匹配前端传递的带ids字段的对象:

// 方式1:用Map接收
@DeleteMapping(value = "/delete")
public @ResponseBody String delete(@RequestBody Map<String, List<Long>> param){
    List<Long> ids = param.get("ids");
    // 执行业务逻辑
}

// 方式2:自定义DTO接收
@Data
public class DeleteIdsReq {
    private List<Long> ids;
}

@DeleteMapping(value = "/delete")
public @ResponseBody String delete(@RequestBody DeleteIdsReq req){
    List<Long> ids = req.getIds();
    // 执行业务逻辑
}

同时前端补充JSON序列化配置:

var ids = [1,2,3];
var dataIds = {ids: ids};
$.ajax({
    type: 'DELETE',
    url: _host + '/delete',
    data: JSON.stringify(dataIds), // 序列化为JSON字符串
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    async: false,
    success: function (result) {                        
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:03