在 Spring MVC 中,`@RequestMapping` 支持类级别和方法级别的组合。若类上配置了路径(如 `/hl`),方法上配置了子路径(如 `/func`),最终访问路径为两者的拼接。
关键点:
-
路径拼接规则:Spring 会自动处理斜杠。类路径 `/hl` 与方法路径 `/func` 拼接后为 `/hl/func`。即使方法路径写为 `func`(无前导斜杠)或 `/func`,结果通常一致,但建议统一使用前导斜杠以规范代码 。
-
唯一性约束:同一应用下,最终生成的完整 URL 路径必须唯一。如果存在另一个 Controller 的方法直接映射为 `/hl/func`,或者另一个类+方法组合也生成 `/hl/func`,启动时会报 `Ambiguous mapping` 异常 。
-
尾随斜杠差异:Spring Boot 3.x (Spring Framework 6) 默认不再忽略尾随斜杠。`/hl/func` 与 `/hl/func/` 被视为不同路径,需确保前端请求路径与后端定义严格匹配 。
代码示例:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hl") // 类级别基础路径
public class HlController {
@GetMapping("/func") // 方法级别子路径
public String func() {
return "Accessed /hl/func";
}
}
```
访问地址: `GET http://localhost:8080/hl/func\`
避坑指南:
-
避免在类或方法路径中使用连续斜杠(如 `//hl`),Spring 会将其规范化为单斜杠,但可能导致歧义或不可访问 。
-
若需同时支持 `/func` 和 `/hl/func`,不能通过同一个 Controller 的简单组合实现,需定义两个独立的方法或使用重定向,因为一个方法只能映射一组确定的路径模式 。