You need to enable JavaScript to run this app. Spring Boot DELETE接口报Required String parameter 'xxx'不存在如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot DELETE接口报Required String parameter 'xxx'不存在如何解决?

问题产生原因

这个问题本质是Servlet规范和Spring Web的默认参数解析规则导致的:

  • Servlet规范默认仅会对POST请求的application/x-www-form-urlencoded、multipart/form-data类型请求体做参数解析,把表单参数放入请求的ParameterMap中,DELETE、PUT等请求方法的表单请求体默认不会被解析
  • @RequestParam注解默认是从请求的ParameterMap中读取参数,所以POST请求时你放在form-data里的参数可以被正常读取,换成DELETE请求后,请求体的参数没有被解析进ParameterMap,就会报参数缺失的错误。
解决方法

以下是4种可行的解决方案,可根据业务场景选择:

  • 参数放到URL查询参数中(最推荐,符合REST设计规范)
    调用时直接把参数拼在请求地址后,格式为/testing?requestId=xxx,@RequestParam可以直接读取到URL上的查询参数,不需要修改接口代码。
  • 参数改为路径变量
    修改接口定义,把参数嵌入请求路径:
@RequestMapping(value = "/testing/{requestId}", method = RequestMethod.DELETE)
public ResponseEntity<Object> testing(@PathVariable(value = "requestId", required = true) String requestId){
    return new ResponseEntity<Object>(requestId, HttpStatus.OK);        
}

调用时请求地址格式为/testing/你的requestId值即可。

  • 配置服务端开启非POST请求的表单参数解析
    在Spring Boot的application.properties/application.yml中添加如下配置,让Tomcat解析DELETE、PUT等请求的表单参数:
# 允许Tomcat解析DELETE、PUT方法的表单请求体
server.tomcat.parse-body-methods=POST,PUT,DELETE

配置完成后不需要修改接口代码,原有的DELETE接口就可以正常读取form-data里的参数。

  • 改用@RequestBody接收JSON格式参数
    如果参数较多,建议把参数放在JSON请求体中传递,修改接口如下:
@RequestMapping(value = "/testing", method = RequestMethod.DELETE)
public ResponseEntity<Object> testing(@RequestBody Map<String, Object> params){
    String requestId = params.get("requestId").toString();
    return new ResponseEntity<Object>(requestId, HttpStatus.OK);        
}

调用时把请求体格式改为JSON,传入{"requestId":"xxx"}即可。


内容的提问来源于stack exchange,提问作者Candra Juliana Sakti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:18:00