每个控制器的SpringFox Docket在Spring Boot中不起作用 [英] SpringFox Docket per controller not working in spring boot
问题描述
在我的spring boot应用程序中,我有多个Rest Controller,并且需要分别为每个控制器生成swagger.
通过对我的Spring Boot应用程序类中的每个控制器使用下面的Docket配置,我可以通过转到/v2/api-docs?group = ai(其中i = 1到n
)下载特定于控制器的摇摇欲坠
但是在swagger-ui.html中,当我选择a1(/v2/api-docs?group = a1)时,它在选择a2(/v2/api-docs?greoup时将路径显示为"/api/a1/a1" = a2),它显示正确的路径,即/api/a2
我尝试过在Docket中将路径正则表达式更改为绝对例如"api/a1"等,但没有帮助.
In my spring boot application, I have multiple Rest Controllers and need to generate swagger for each controller seperately.
By using below Docket config for each controller in my spring boot application class, i am able to download controller specific swagger by going to /v2/api-docs?group=ai where i = 1 to n
However in swagger-ui.html, when i select a1(/v2/api-docs?group=a1), it shows path as "/api/a1/a1", while selecting a2(/v2/api-docs?greoup=a2), it shows correct path i.e. /api/a2
I have tried changing in Docket ,paths regex to absolute e.g. "api/a1" etc but that didn't help.
@Bean
public Docket a1Api() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("a1")
.apiInfo(a1Info())
.select().apis(RequestHandlerSelectors.any())
.paths(regex("/api/a1.*"))
.build()
.pathMapping("/");
}
@Bean
public Docket a2Api() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("a2")
.apiInfo(a1Info())
.select().apis(RequestHandlerSelectors.any())
.paths(regex("/api/a2.*"))
.build()
.pathMapping("/");
}
private ApiInfo a1Info() {
return new ApiInfoBuilder()
.title("a1 Swagger 2.0")
.description("a1")
.license("a1")
.version("1.0")
.build();
}
private ApiInfo a2Info() {
return new ApiInfoBuilder()
.title("a2 Swagger 2.0")
.description("a2")
.license("a2")
.version("1.0")
.build();
}
其他控制器
@RestController
@Api(tags = "A1")
@RequestMapping("/api/a1")
public class a1Controller {
@ApiOperation(value = "a1")
@RequestMapping(value = "", method = RequestMethod.POST)
public a1Response invoke(@RequestBody a1Request va1Request) {
.....;
}
}
@RestController
@Api(tags = "An")
@RequestMapping("/api/an")
public class a1Controller {
@ApiOperation(value = "an")
@RequestMapping(value = "", method = RequestMethod.POST)
public anResponse invoke(@RequestBody anRequest vanRequest) {
.....;
}
}
任何想法我该如何解决....
我正在使用springfox swagger版本2.6.1
Any idea how can i address this....
i am using springfox swagger version 2.6.1
推荐答案
您可以使用以下Swagger配置添加多个控制器类:
You can add multiple controller class using following Swagger Configuration:
1)创建一个Swagger配置类.
1) Create a Swagger Configuration Class.
2)然后指定控制器的基本软件包.
2) Then specify the base package of controllers.
import java.util.Collections;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig
{
private static final ApiInfo DEFAULT_API_INFO = null; //Swagger info
@Bean
public Docket api()
{
return new Docket(DocumentationType.SWAGGER_2)
.forCodeGeneration(Boolean.TRUE)
.select()
.apis(RequestHandlerSelectors.basePackage("com.user.controller"))
.paths(PathSelectors.any())
.paths(Predicates.not(PathSelectors.regex("/logout.*")))
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfo(
"REST API",
"REST description of API.",
"API TOS",
"Terms of service",
new Contact("Rajib Garai", "https://www.linkedin.com/in/rajibgarai90/", "90rajibgarai@gmail.com"),
"License of API", "API license URL", Collections.emptyList());
}
}
这篇关于每个控制器的SpringFox Docket在Spring Boot中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!