路由

未匹配的标注

路由

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 格式
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
唐章明
讨论数量: 0
发起讨论 查看所有版本


暂无话题~