在控制器类级别使用@RequestMapping配置动态URL是否可行?
你所写的代码写法完全可行,Spring MVC 及 Spring Boot 均原生支持类级别 @RequestMapping 携带动态路径变量。
实现逻辑说明
类上定义的 @RequestMapping 路径会自动和该类下所有方法的请求映射路径拼接,类路径上声明的路径变量 {somethingsId} 会在整个控制器的请求匹配周期内生效,你可以直接在方法参数中通过 @PathVariable 注解获取该变量的值,无需在每个方法的路径中重复定义该参数。
简化用法
如果该控制器下所有方法都需要用到 somethingsId,还可以结合请求作用域将路径变量注入为类成员变量,进一步简化重复代码:
@RestController @RequestMapping("/something/{somethingsId}") @RequestScope // 声明控制器为请求作用域 public class ExampleController{ // 直接注入类级别的路径变量 @PathVariable("somethingsId") private String somethingsId; @GetMapping("/getOtherThing") public ResponseEntity<String> getOtherThing(){ // 业务逻辑直接使用成员变量即可 return ResponseEntity.ok(somethingsId); } @GetMapping("/anotherEndpoint") public ResponseEntity<String> anotherEndpoint(){ return ResponseEntity.ok("当前操作ID为:" + somethingsId); } }
额外使用提示
- 类级别的路径变量同样支持正则表达式约束,例如
@RequestMapping("/something/{somethingsId:\\d+}")可以限制仅数字类型的ID匹配该控制器 - 多个控制器定义带路径变量的前缀路径时,Spring会按照最长匹配原则分配请求,不会出现规则冲突
- 该写法完全符合你按公共路径参数拆分控制器的需求,可以避免每个方法重复书写相同的路径前缀,大幅提升代码可维护性
内容的提问来源于stack exchange,提问作者Pmsmm
相关产品推荐
相关产品推荐

