在@ModelAttribute 注释方法中自动记录@PathVariable 注释参数

Automatically document @PathVariable annotated parameters within @ModelAttribute annotated methods

在我们的 REST-API 中,我们需要具备多租户能力。为了实现这一点,所有其余控制器子类化了一个公共 REST 控制器,该控制器定义了一个请求映射前缀并公开了一个模型属性,如下所示

@RequestMapping(path = "/{tenantKey}/api")
public class ApiController {

   @ModelAttribute
   public Tenant getTenant(@PathVariable("tenantKey") String tenantKey) {
     return repository.findByTenantKey(tenantKey);
   }

}

派生控制器在其请求映射方法中使用模型属性:

@RestController
public class FooController extends ApiController {

  @RequestMapping(value = "/foo", method = GET)
  public List<Foo> getFoo(@ApiIgnore @ModelAttribute Tenant tenant) {
    return service.getFoos(tenant);
  }

}

这个端点在 swagger-ui 中得到了很好的记录。我得到一个记录了路径 /{tenantKey}/api/foo.

的 GET 映射的端点

我的问题是,{tenantKey} 路径变量未作为参数记录在 swagger-ui 中。 swagger 中的参数部分根本没有呈现。如果我向控制器方法添加一个字符串参数,用 @PathVariable("tenantKey) 注释它一切都很好,但我不想在我的控制器方法中使用 tenantKey 参数,因为已解析的租户已经作为模型属性可用.

所以我的问题是:有没有办法从 ApiController 中记录的 @ModelAttriute 注释方法中获取 @PathVariable 在此设置中的 swagger-ui 中?

项目设置是

这当然是可能的。当前不支持方法的模型属性。相反,您可以采用以下方法。

  1. @ApiIgnore 标记 getTenant 方法(不确定它是否被视为请求映射。)
  2. 在您的摘要中,您可以添加 tenantKey 全局路径变量(到所有端点)。由于这是一个多租户应用程序,因此假设这适用于所有端点。