Spring boot 在@ModelAttribute注释的方法中自动记录@PathVariable注释的参数
在我们的REST-API中,我们需要具有多租户能力。为了实现这一点,所有rest控制器子类化了一个公共rest控制器,该控制器定义了一个请求映射前缀,并公开了一个模型属性,如下所示Spring boot 在@ModelAttribute注释的方法中自动记录@PathVariable注释的参数,spring-boot,swagger,springfox,Spring Boot,Swagger,Springfox,在我们的REST-API中,我们需要具有多租户能力。为了实现这一点,所有rest控制器子类化了一个公共rest控制器,该控制器定义了一个请求映射前缀,并公开了一个模型属性,如下所示 @RequestMapping(path = "/{tenantKey}/api") public class ApiController { @ModelAttribute public Tenant getTenant(@PathVariable("tenantKey") String tenant
@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);
}
}
@RestController
公共类FooController扩展了ApicController{
@RequestMapping(value=“/foo”,method=GET)
公共列表getFoo(@apignore@modeldattribute租户){
返回服务.getFoos(租户);
}
}
这个端点在swagger ui中得到了很好的记录。我使用路径/{tenantKey}/api/foo
的get映射来记录端点
我的问题是,{tenantKey}path变量没有作为参数记录在swagger ui中。swagger中的参数部分根本不渲染。如果我向controller方法添加一个字符串参数,并用@PathVariable(“tenantKey”)
对其进行注释,一切都很好,但我不希望在我的controller方法中使用tenantKey
参数,因为解析的租户已作为model属性可用
所以我的问题是:有没有一种方法可以从@modelatriute
中的@ApiController
注释方法中获取@PathVariable
,并在这个设置中记录在Swigger ui中
项目设置为
- 弹簧靴(1.4.2)
- springfox-Swagger 2(2.6.1)
- springfox大摇大摆用户界面(2.6.1)
@apignore
标记getTenant
方法(不确定是否将其视为请求映射)tenantKey
全局路径变量(到所有端点)。由于这是一个多租户应用程序,因此假设它适用于所有端点谢谢你的回答。我配置了一个全局路径变量,这完美地解决了我的问题。顺便说一句:
getTenant
方法没有被视为请求映射。它没有以任何方式记录下来,但这是我所期望的行为,因为它只在内部工作,对REST API没有任何影响。