Skip to content

方法级别 @RequestMapping 与语法糖注解支持

AsyncTest Caller 对方法级别的 @RequestMapping 及其相关语法糖注解(如 @GetMapping, @PostMapping 等)有如下支持与规则。


1️⃣ 请求路径与方法解析

  1. @RequestMappingpath 参数为列表
    • 仅取第一个路径作为最终接口路径
java
@RequestMapping(path = {"/user", "/member"})
public String getUser() {}

最终解析路径为 /user

  1. @RequestMappingmethod 参数为列表
    • 仅取第一个 HTTP 方法
java
@RequestMapping(method = {RequestMethod.POST, RequestMethod.GET})
public void saveUser() {}

最终 HTTP Method 为 POST

  1. 语法糖注解如 @GetMapping@PostMapping

    • 如果存在多个语法糖注解,只取第一个生效
  2. 同时存在 @RequestMapping 与语法糖注解

    • 最终请求方法由更加具体的注解决定
    • 示例:
java
@RequestMapping(method = RequestMethod.POST)
@GetMapping("/list")
public List<User> listUsers() {}

最终 HTTP Method 为 GET

  1. 未指定请求方法

    • 默认请求方法为 GET
  2. path、headers、params、consumes 参数合并规则

    • 类级 + 方法级 + 语法糖注解均参与合并
    • 优先级由更具体的注解决定
  3. path 转换为 AsyncTest 格式

    • Spring {} 路径变量转换为
    • 示例:

/api/user/{id} -> /api/user/{{id}}

/api/{id:[0-9]+} -> /api/{{id}}


2️⃣ 继承相关规则

  1. 抽象类和接口

    • 在类筛选阶段被忽略
  2. 重写父类方法,且路由一致

    • 仅插入子类节点到 tree 结构
  3. 重写父类方法,但路由不一致

    • 父类和子类方法均插入到 tree 结构
  4. 相同路由但函数名不一致(错误代码,Spring 无法启动)

    • 但插件仍然解析,仅保留子类函数节点
  5. 无继承关系但存在相同路由

    • 仅插入后出现的节点到 tree 结构
    • 启动时会报错

✅ 总结

  • 方法级 @RequestMapping 与语法糖注解
    • pathmethodheadersparamsconsumes 统一解析与合并
    • 优先级由更具体注解决定
  • 路径变量自动转换为 AsyncTest 模板格式
  • 插件遵循 Spring MVC 继承语义,保证接口 tree 与实际运行一致