如何为同一方法配置@PostMapping与@DeleteMapping两种URL映射?
解决方案
这里提供两种优雅的方式实现需求,避免代码重复:
方法一:使用@RequestMapping组合路径与请求方法
直接在方法上通过@RequestMapping的value指定多个路径,method指定多个请求方法,让同一个方法同时处理两种请求:
package com.example.demo; import org.springframework.web.bind.annotation.*; @RestController public class MyController { @RequestMapping( value = {"/sth", "/sth/delete"}, method = {RequestMethod.POST, RequestMethod.DELETE} ) public String deleteSth(){ return "delete success"; } }
该配置会同时匹配:
- POST 请求
http://localhost:8080/sth/delete - DELETE 请求
http://localhost:8080/sth
方法二:控制器级别@RequestMapping+方法级快捷注解
把公共路径提取到控制器的@RequestMapping中,再在方法上用快捷注解分别指定剩余路径和请求方法,代码结构更清晰:
package com.example.demo; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/sth") public class MyController { @DeleteMapping("") @PostMapping("/delete") public String deleteSth(){ return "delete success"; } }
这种写法的效果和方法一完全一致,只是把路径拆分到了控制器层面,更符合RESTful风格的代码组织方式。
关于你之前写法不生效的原因
@PostMapping和@DeleteMapping是@RequestMapping的快捷封装,虽然语法上允许在同一个方法上添加多个这类注解,但部分Spring版本或场景下会出现映射注册异常,导致其中一个注解不生效。而使用@RequestMapping的value和method数组参数是官方推荐的多映射绑定方式,稳定性更高。
内容的提问来源于stack exchange,提问作者HarrisonQi
相关产品推荐
相关产品推荐

