DELETE请求不支持异常排查:SpringBoot前后端代码及URL分析
问题原因及解决办法
核心问题
后端接口定义与前端请求方式不匹配:
- 后端通过
@DeleteMapping("{ids}")+@PathVariable,期望接收路径变量形式的请求URL,比如/category/1397844263642378242 - 前端实际发送的是查询参数形式的URL:
/category?ids=1397844263642378242,后端找不到对应映射的接口,因此抛出HttpRequestMethodNotSupportedException
两种修复方案
方案一:修改后端代码(适配前端请求)
将@PathVariable替换为@RequestParam,同时调整@DeleteMapping的路径:
@RequestMapping("/category") public class CategoryController { @DeleteMapping public R<String> delete(@RequestParam("ids") Long ids){ categoryService.remove(ids); return R.success("删除成功"); } }
方案二:修改前端代码(适配后端接口)
把参数拼接到URL路径中,而非使用params传递:
const deleteCategory = (ids) => { return $axios({ url: `/category/${ids}`, method: 'delete' }) }
额外扩展(批量删除场景)
如果需要支持批量删除多个ID,可调整如下:
后端代码:
@RequestMapping("/category") public class CategoryController { @DeleteMapping public R<String> delete(@RequestParam("ids") List<Long> ids){ categoryService.removeByIds(ids); return R.success("删除成功"); } }
前端代码(传递多个ID时,参数格式为ids=[1,2,3]):
const deleteCategory = (ids) => { return $axios({ url: '/category', method: 'delete', params: { ids } }) }
内容的提问来源于stack exchange,提问作者xiaowei
相关产品推荐
相关产品推荐

