1.引入依赖
<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
2.创建zuul模块并添加配置
server:
port: 6001spring:
application:
name: microservice-zuuleureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka
instance:
instance-id: microservice-zuul #自定义服务名称信息
prefer-ip-address: true #访问路径可以显示IP地址
zuul:
ignored-services: "*"
prefix: /api
# strip-prefix: false
routes:
user:
serviceId: microservice-user
path: /**
film:
serviceId: microservice-film
path: /film-cli/**
order:
serviceId: microservice-order
path: /order-cli/**info:
app.name: microservicecloud-zuul
company.name: www.he.com
build.artifactId: $project.artifactId$
build.version: $project.version$
3. 在zuul项目下创建配置
package com.he.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.build();
}private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("分布式系统")
.description("系统接口文档说明")
.termsOfServiceUrl("http://localhost:7001")
.version("1.0")
.build();
}
@Bean
UiConfiguration uiConfig() {
return new UiConfiguration(null, "list", "alpha", "schema",
UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L);
}
}
package com.he.config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.zuul.filters.Route;
import org.springframework.cloud.netflix.zuul.filters.RouteLocator;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider{
@Autowired
private final RouteLocator routeLocator;
public DocumentationConfig(RouteLocator routeLocator) {
this.routeLocator = routeLocator;
}@Override
public List<SwaggerResource> get() {
List<SwaggerResource> resources = new ArrayList<>();
List<Route> routes = routeLocator.getRoutes();
System.err.println(Arrays.toString(routes.toArray()));
routes.forEach(route -> {
resources.add(swaggerResource(route.getId(), route.getFullPath().replace("/**", "/v2/api-docs"),"1.0"));
System.err.println(route.getFullPath().replace("/**", "/v2/api-docs"));
});
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;
}
}
4.在启动类中添加跨域支持
package com.he;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;/**
* <p>Title: ZuulApplication.java</p>
* <p>Description: </p>
* <p>Company: cn.hand.com</p>
* @author: MrHe
* @date: 2019年7月26日
* @version: 1.0
*/
@SpringBootApplication
@EnableZuulProxy //启动Zuul
@EnableDiscoveryClient //表示eureka客户端
@EnableEurekaClient
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
// 跨域访问
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.setMaxAge(3600L);
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
5.在各个客户端服务添加配置
package com.he.config;
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;@Configuration
@EnableSwagger2
public class Swagger2 {@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.he.controller"))
.paths(PathSelectors.any())
.build();
}private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("用户api")
.description("描述")
.termsOfServiceUrl("no terms")
.version("1.0")
.build();
}}