本地環(huán)境代碼
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
引入swagger(注意所有子模塊包括gateway都要引入此依賴)
<!-- 可以在parent中編寫此配置分预,子項(xiàng)目直接引用依賴無需設(shè)置版本 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
網(wǎng)關(guān)配置
- gateway依賴配置
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 使用parent的版本 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webflux-ui</artifactId>
<version>1.6.14</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-ui</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations-jakarta</artifactId>
<version>2.2.7</version>
</dependency>
- 編寫配置類 SwaggerUiWebFluxConfigurer
@Configuration
public class SwaggerUiWebFluxConfigurer implements WebFluxConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 配置跨域
registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTION", "DELETE").maxAge(3600);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 重新映射路徑
registry.
addResourceHandler("/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
.resourceChain(false);
registry.addResourceHandler("/swagger-ui.html**")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/").resourceChain(true);
}
}
- 重新設(shè)置訪問路徑
SwaggerHandler
@RestController
public class SwaggerHandler {
@Autowired(required = false)
private SecurityConfiguration securityConfiguration;
@Autowired(required = false)
private UiConfiguration uiConfiguration;
private final SwaggerResourcesProvider swaggerResources;
@Autowired
public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
this.swaggerResources = swaggerResources;
}
@GetMapping("/swagger-resources/configuration/security")
public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
return Mono.just(new ResponseEntity<>(
Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
}
@GetMapping("/swagger-resources/configuration/ui")
public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
return Mono.just(new ResponseEntity<>(
Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
}
@GetMapping("/swagger-resources")
public Mono<ResponseEntity> swaggerResources() {
return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
}
}
- 啟動類添加注解
@EnableSwagger2WebFlux
@SpringBootApplication
@EnableSwagger2WebFlux
public class ImesGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ImesGatewayApplication.class, args);
}
}
5.配置引用的服務(wù) 在bootstrap.yaml
或application.yaml
編寫
springdoc:
swagger-ui:
urls:
- name: '你自己的服務(wù)名稱1'
url: 服務(wù)路徑前綴/v2/api-docs
- name: '你自己的服務(wù)名稱2'
url: 服務(wù)路徑前綴/v2/api-docs
其他服務(wù)配置
- pom.xml 引用
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
- 配置類(我的服務(wù)比較特殊需要實(shí)現(xiàn)過濾器轉(zhuǎn)發(fā)請求后才能訪問)
注入 Docket 的bean是必須的
@Configuration
public class SwaggerFilter implements Filter {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("填寫你要掃描的包名"))
.paths(PathSelectors.any())
.build()
.globalRequestParameters(getGlobalRequestParameters());
}
//生成全局通用參數(shù)
private List<RequestParameter> getGlobalRequestParameters() {
List<RequestParameter> parameters = new ArrayList<>();
parameters.add(new RequestParameterBuilder()
.name("Authorization")
.description("認(rèn)證")
.in(ParameterType.HEADER)
.query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))
.defaultValue("Bearer "))
.required(true)
.build());
return parameters;
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
if (httpRequest.getRequestURI().equals("/device/v2/api-docs")) {
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/v2/api-docs");
requestDispatcher.forward(request,response);
}else {
chain.doFilter(request,response);
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
- 啟動類設(shè)置
@EnableSwagger2
@SpringBootApplication
@EnableSwagger2
public class ImesDeviceApplication {
public static void main(String[] args) {
SpringApplication.run(ImesDeviceApplication.class, args);
}
}
注意:如果有配置安全認(rèn)證相關(guān)的代碼需要放行
"/v2/api-docs"
路徑
完成宵距!訪問 http://你的ip+端口/doc.html
即可進(jìn)入