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

Spring调用DELETE接口报Required request body is missing错误求解

问题根因与解决方案

核心报错原因

  • 请求JSON结构与Controller接收参数结构不匹配
    你提交的请求体外层是包含TaskDTO属性的JSON对象,而Controller的@RequestBody直接声明接收List<TaskDTO>类型,Spring的消息转换器无法将带外层包装的JSON对象反序列化为List集合,反序列化失败后会抛出请求体缺失的异常。

修复方案二选一:

  1. 调整请求JSON结构,直接传递数组,去掉外层包装:
[
    {
        "taskid": "31C3C17E80DD41DEB5938E828CDC28EF",
        "refId": null,
        "taskCode": null,
        "taskName": null,
        "status": null,
        "state": null,
        "categories": null,
        "begintime": null,
        "intervals": 60,
        "description": "desc",
        "beanclassname": "Monitor",
        "beanmethodname": "executeReceiveDataTask",
        "beanmethodparams": null,
        "createtime": null,
        "lastupdatetime": null
    }
]
  1. 新增包装类适配现有请求结构,调整Controller参数类型:
// 新增包装类
@Data
public class TaskDTOWrapper {
    private List<TaskDTO> TaskDTO;
}

// Controller方法调整
@DeleteMapping(value = "")
public @ResponseBody String delete(@RequestBody TaskDTOWrapper wrapper){
    List<TaskDTO> taskDTOs = wrapper.getTaskDTO();
    // 原有业务逻辑
}

其他可能触发该报错的原因

  • 请求未正确设置Content-Type: application/json头,Spring无法识别请求体为JSON格式,导致反序列化失败
  • 你使用的HTTP客户端默认禁止DELETE请求携带请求体,会自动丢弃提交的请求体(比如部分旧版本的Postman、OkHttp客户端),可更换客户端或调整客户端配置测试,也可将接口改为POST请求兼容

排查建议

可先给@RequestBody注解添加required = false属性,确认请求是否能正常进入方法,打印参数判断是反序列化问题还是真的未获取到请求体:

public @ResponseBody String delete(@RequestBody(required = false) List<TaskDTO> taskDTOs){
    System.out.println("接收参数:" + taskDTOs);
    // 原有业务逻辑
}

额外注意点

你当前请求JSON中的status字段和TaskDTO类中定义的taskStatus字段名不匹配,如果需要接收该字段值,要么修改请求JSON的字段名为taskStatus,要么给TaskDTO类的taskStatus属性添加@JsonProperty("status")注解,否则该字段会被反序列化为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:24:00