1. 为什么需要统一管理Controller路径前缀?
在Spring Boot项目中,我们经常会遇到这样的场景:一个电商系统可能包含用户模块、商品模块、订单模块等多个业务模块。按照常见的开发习惯,我们会在每个Controller类上添加@RequestMapping注解来定义路径前缀:
java复制@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/info")
public String getUserInfo() {
// ...
}
}
@RestController
@RequestMapping("/product")
public class ProductController {
@GetMapping("/detail")
public String getProductDetail() {
// ...
}
}
这种硬编码方式存在几个明显问题:
- 维护成本高:当需要修改路径前缀时(比如从
/user改为/api/user),必须逐个修改所有Controller类 - 容易出错:开发人员可能忘记添加前缀,或者拼写不一致(如
/user和/users混用) - 缺乏统一性:不同模块的前缀风格可能不统一,影响API的整体规范性
提示:在实际项目中,路径前缀的变更需求很常见。比如从
/v1/user升级到/v2/user,或者需要为所有接口添加/api前缀等。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基于WebMvcConfigurer的解决方案
Spring Boot提供了WebMvcConfigurer接口,允许我们对Spring MVC进行定制化配置。通过实现该接口的configurePathMatch方法,可以统一添加路径前缀:
java复制@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(
