gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:06:06 24 4
gpt4 key购买 nike

在我们的 REST-API 中,我们需要具备 Multi-Tenancy 能力。为了实现这一点,所有其余 Controller 都继承了一个公共(public) REST Controller ,该 Controller 定义了一个请求映射前缀并公开了一个模型属性,如下所示

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

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

}

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

@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 中的参数部分根本没有呈现。如果我向 Controller 方法添加一个 String 参数,用 @PathVariable("tenantKey) 注释它,一切都很好,但我不想在我的 Controller 方法中使用 tenantKey 参数,因为已解析的租户已作为模型属性可用。

所以我的问题是:有没有一种方法可以从 ApiController 中记录的 @ModelAttriute 注释方法中获取 @PathVariable swagger-此设置中的用户界面?

项目设置是

  • Spring-Boot (1.4.2)
  • springfox-swagger2 (2.6.1)
  • springfox-swagger-ui (2.6.1)

最佳答案

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

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

关于spring-boot - 在@ModelAttribute 注释方法中自动记录@PathVariable 注释参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42763412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com