SpringFox设定
maven dependency
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version></dependency>
如何读取Docket
springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper
为起点
因实作SmartLifecycle
会等所有的Bean準备完成,并执行实作方法start()
开始扫描Docket
建立Documentation最后放入DocumentationCache
当呼叫path/v3/api-docs
,就会回传swagger的json文件,OpenApiControllerWebMvc
是预设的API Controller
由DocumentationCache
取出Documentation处理完成后并回传,就是我们看到的json档案
Docket建立
範例程式
@BeanDocket docket() { return new Docket(DocumentationType.OAS_30) .servers(new Server("test", "http://localhost", "test", Collections.EMPTY_LIST, Collections.EMPTY_LIST)) // 目前有些问题 .groupName("API文件") .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.app")) .paths(PathSelectors.regex("/api/hello/.*")) .build();}private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("测试api") .description("测试用的的api") .contact(new Contact("Lucas", "联络的网址", "联络的mail")) .version("1.0.0") // api的版本 .build();}
Docket里的servers没有反应 issue
目前Docket
里的servers是被放到Documentation
的resourceListing而非Documentation
的servers,所以在controller取出Documentation
放入OpenAPI
的servers就没有改变
暂时解决方式
建立一实作WebMvcOpenApiTransformationFilter
的Bean
@Overridepublic OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) { OpenAPI openApi = context.getSpecification(); Server server = new Server(); server.setDescription("test"); server.setUrl("http://localhost"); List<Server> servers = new ArrayList<>(openApi.getServers()); servers.add(server); openApi.setServers(servers); return openApi;}@Overridepublic boolean supports(DocumentationType documentationType) { return documentationType.equals(DocumentationType.OAS_30);}