路由
路由
springboot的没有Yii、Thinkphp式的自动映射路由方案,不存在根据url自动映射到某个控制器方法这种形式。
springboot的路由更接近laravel和Golang Gin,但是它又没有route这样统一的路由注册文件,而是在每个控制器和控制器方法定义路由注解,springboot启动时会扫描整个项目,把所有路由统一起来组成路由表,运行时再根据路由表运行对应的控制器代码。
如果你只接触过php开发,可以参开thinkphp的文档 Thinkphp|注解路由。
可用注解
注解 | 说明 |
---|---|
@RequestMapping | 定义请求映射的通用配置(路径、HTTP 方法等) |
@GetMapping | 以下五个为RequestMapping子集 |
@PostMapping | |
@PutMapping | |
@DeleteMapping | |
@PatchMapping |
注解参数
参数 | 用途 | 示例 |
---|---|---|
value /path |
定义 URL 路径 | value = "/users" |
method |
限制 HTTP 方法 | method = RequestMethod.POST |
params |
限制请求参数 | params = "id=123" |
headers |
限制请求头 | headers = "Accept=application/json" |
consumes |
限制请求的 Content-Type | consumes = "application/json" |
produces |
限制响应的 Accept 类型 | produces = "text/html" |
name |
为映射命名(辅助用途) | name = "user_api" |
实例
/**
* 仅能通过GET 访问 domain.com/abort
*/
@GetMapping("/abort")
public String abortAction(){
// 业务代码
}
/**
* RequestMapping完整参数
* 其他几个注解除了method,其他参数也相同
*/
@RequestMapping(
value = "/users/{id}",
method = RequestMethod.GET,
params = "details=full",
headers = "X-API-Version=1",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
public String UserDetail(@PathVariable Long id){
// 仅匹配:
// - GET 请求
// - URL 包含 /users/{id} 且 ?details=full
// - 请求头包含 X-API-Version=1
// - 请求的 Content-Type 为 JSON
// - 响应为 JSON 格式
}