Nacos閘道器gateway整合swagger
我們都知道swagger可以
根據在程式碼中使用自定義的註解來生成介面文件,這個在前後端分離的專案中很重要。這樣做的好處是 在開發介面時可以透過swagger 將介面文件定義好,同時也方便以後的維護。
但是分成微服務後,可能會存在多個微服務,這樣如果每個服務都搞個單獨的swagger頁面的話,這樣前段檢視介面會非常麻煩。因此我們可以在閘道器服務整合swagger給註冊中心的微服務來總體展示。
環境配置:
pom:
<!—— api swagger ——>
swagger類配置:
閘道器服務配置類:
記住網管服務配置不要加@Configuration註解,否則會報錯,因為閘道器沒有引入springboot-web包。
package com。consumer。swagger;import org。springframework。beans。factory。annotation。Value;import org。springframework。context。annotation。Bean;import org。springframework。context。annotation。Configuration;import springfox。documentation。builders。ApiInfoBuilder;import springfox。documentation。builders。PathSelectors;import springfox。documentation。builders。RequestHandlerSelectors;import springfox。documentation。service。ApiInfo;import springfox。documentation。spi。DocumentationType;import springfox。documentation。spring。web。plugins。Docket;import springfox。documentation。swagger2。annotations。EnableSwagger2;/** * @author xg */@EnableSwagger2public class Swagger2 { @Value(“${spring。application。name}”) String appName; @Bean public Docket createRestApi() { return new Docket(DocumentationType。SWAGGER_2) 。apiInfo(apiInfo()) 。select() 。apis(RequestHandlerSelectors。basePackage(“com。consumer”)) 。paths(PathSelectors。any()) 。build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() 。title(appName + “專案 RESTful API介面文件”) 。description(“”) 。version(“1。0”) 。build(); }}
接下里我們還要建個類,用來初始化各個服務的swagger,讀取到閘道器的swagger中。
package com。gateway。swagger;import org。springframework。beans。factory。annotation。Autowired;import org。springframework。beans。factory。annotation。Value;import org。springframework。cloud。gateway。route。RouteLocator;import org。springframework。stereotype。Component;import springfox。documentation。swagger。web。SwaggerResource;import springfox。documentation。swagger。web。SwaggerResourcesProvider;import java。util。ArrayList;import java。util。HashSet;import java。util。List;import java。util。Set;/** * @author xg * 聚合各個服務的swagger介面 */@Componentpublic class SwaggerProvider implements SwaggerResourcesProvider { /** * swagger2預設的url字尾 */ private static final String SWAGGER2URL = “/v2/api-docs”; /** * 閘道器路由 */ private final RouteLocator routeLocator; /** * 閘道器應用名稱 */ @Value(“${spring。application。name}”) private String self; @Autowired public SwaggerProvider(RouteLocator routeLocator) { this。routeLocator = routeLocator; } @Override public List
我們還需要SwaggerController這個類,這個類提供整合swagger頁面
swagger-ui
下拉對應的相關介面
package com。gateway。swagger;import io。swagger。annotations。Api;import io。swagger。annotations。ApiOperation;import org。springframework。beans。factory。annotation。Autowired;import org。springframework。http。HttpStatus;import org。springframework。http。ResponseEntity;import org。springframework。web。bind。annotation。GetMapping;import org。springframework。web。bind。annotation。RequestMapping;import org。springframework。web。bind。annotation。RestController;import reactor。core。publisher。Mono;import springfox。documentation。swagger。web。SecurityConfiguration;import springfox。documentation。swagger。web。SecurityConfigurationBuilder;import springfox。documentation。swagger。web。UiConfiguration;import springfox。documentation。swagger。web。UiConfigurationBuilder;import javax。annotation。Resource;import java。util。Optional;/** * @author xg * swagger介面讀取,以及swagger相關ui讀取 */@Api(tags = “swagger重新整理”)@RestController@RequestMapping(“/swagger-resources”)public class SwaggerController { @Autowired(required = false) private SecurityConfiguration securityConfiguration; @Autowired(required = false) private UiConfiguration uiConfiguration; @Resource private SwaggerProvider swaggerResources; @GetMapping(“/configuration/security”) public Mono
以上閘道器swagger就配置好了,現在我們先啟動nacos註冊中心,和一個集成了swagger的微服務。
provider-xg微服務埠號8082:我們直接訪問看看
http://10.45.12.63:8082/swagger-ui.html
是可以訪問的,這時候我們啟動閘道器
閘道器埠號是8099
http://10.45.12.63:8099/swagger-ui.html
此時我們再啟動一個Consumer服務看看:
直接埠訪問:
http://10.45.12.63:8085/swagger-ui.html
我們開啟閘道器swagger頁面,檢視右上角會發現已經有我們的服務了:
點選consumer-xg:
整合ok。
花有重開日,人無再少年,記錄每一次的心動瞬間。