1:引入依赖
<!--由于使用网关统一处理微服务中的所有的接口文档,那么服务肯定需要注册到注册中心上,我这里选用的是eureka作为注册中心 -->
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--引入网关依赖,我这里选用的是zuul网关 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency>
2:在各个微服务中加入swagger配置文件(见我的上一篇博客)
3:在网关服务中同样需要加入swagger配置文件,但是比其他微服务需多注册一个bean对象,来管理整个网关api文档的样式
@Bean UiConfiguration uiConfig() { return new UiConfiguration(null, "list", "alpha", "schema", UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L); }
4:在网关服务中,需要管理各个微服务的文档,那么需要获取到其他微服务的资源信息(该配置文件中的name,location,version等参数可配置再配置中心中)。location参数徐比对着各个服务注册到网关的路径进行匹配
import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import springfox.documentation.swagger.web.SwaggerResource; import springfox.documentation.swagger.web.SwaggerResourcesProvider; import java.util.ArrayList; import java.util.List; @Component @Primary public class DocumentationConfig implements SwaggerResourcesProvider { @Override public List<SwaggerResource> get() { List<SwaggerResource> resources = new ArrayList<>(); resources.add(swaggerResource("通用接口服务Api", "/lemo/common/v2/api-docs", "1.0")); resources.add(swaggerResource("文章服务Api", "/lemo/health_knowledge/v2/api-docs", "1.0")); resources.add(swaggerResource("疾病Api", "/lemo/sickness/v2/api-docs", "1.0")); resources.add(swaggerResource("广告Api", "/lemo/adversiting/v2/api-docs", "1.0")); resources.add(swaggerResource("图片服务Api", "/lemo/images/v2/api-docs", "1.0")); resources.add(swaggerResource("学校服务Api", "/lemo/school/v2/api-docs", "1.0")); resources.add(swaggerResource("用户服务服务Api", "/lemo/user/v2/api-docs", "1.0")); return resources; } private SwaggerResource swaggerResource(String name, String location, String version) { SwaggerResource swaggerResource = new SwaggerResource(); swaggerResource.setName(name); swaggerResource.setLocation(location); swaggerResource.setSwaggerVersion(version); return swaggerResource; } }
5:网关配置文件部分
zuul: # # 隐藏所有微服务名称(即使用微服务名称无法访问到服务) ignored-services: "*" # # 服务前缀名,想要访问项目之前要加上此路径 prefix: /lemo routes: article-server: path: /health_knowledge/** sickness-server: path: /sickness/** common-server: path: /common/** adversiting-server: path: /adversiting/** images-server: path: /images/** saas-school: path: /school/** user-server: path: /user/**