1. yml文件配置
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<!--数据库开始-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<!--数据库结束-->
<!--整合swagger开始-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-spring-webflux</artifactId>
<version>3.0.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-metadata</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-metadata</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<!--整合swagger结束-->
<!--引入更高版本开始-->
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-metadata</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<!--引入更高版本结束-->
<!--引入swagger样式开始-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<!--引入swagger样式结束-->
</dependencies>
2. Application
package com.zkdj.ytdp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.data.web.ReactivePageableHandlerMethodArgumentResolver;
import org.springframework.data.web.ReactiveSortHandlerMethodArgumentResolver;
import org.springframework.web.reactive.config.WebFluxConfigurer;
import org.springframework.web.reactive.result.method.annotation.ArgumentResolverConfigurer;
@SpringBootApplication
@ComponentScan(basePackages = {"com.zkdj.ytdp"},
excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
classes = {}))
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
3.SwaggerUiWebFluxConfigurer
在官网上看到了 WebFluxConfigurer,通过配置实现 WebFluxConfigurer 后,可以完美解决 webflux 整合
swagger 出现 404 问题。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.CorsRegistry;
import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;
@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);
}
}
4.SwaggerWebFluxConfig
现在需要开启 swagger,网上很多人使用的是 @EnableSwagger2WebFlux
注解,那是因为他们使用的是快照版本,现在的正式版本已经把它废弃掉了 @Deprecated,推荐的还是使用 @EnableSwagger2。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger.web.UiConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.Optional;
@Configuration
@EnableSwagger2
public class SwaggerWebFluxConfig {
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment) {
//设置要配置的Swagger环境
Profiles profiles = Profiles.of("dev");
// Profiles profiles = Profiles.of("test");
//通过environment.acceptsProfiles判断是否处在自己设定的环境中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())//配置Swagger信息
.enable(flag) //通过flag判断是否开启
.select()
/**
* apis():指定扫描的接口
* RequestHandlerSelectors:配置要扫描接口的方式
* basePackage:指定要扫描的包
* any:扫面全部
* none:不扫描
* withClassAnnotation:扫描类上的注解(参数是类上注解的class对象)
* withMethodAnnotation:扫描方法上的注解(参数是方法上的注解的class对象)
*/
.apis(RequestHandlerSelectors.basePackage("com.zkdj.ytdp.controller"))
/**
* paths():过滤路径
* PathSelectors:配置过滤的路径
* any:过滤全部路径
* none:不过滤路径
* ant:过滤指定路径:按照按照Spring的AntPathMatcher提供的match方法进行匹配
* regex:过滤指定路径:按照String的matches方法进行匹配
*/
.paths(PathSelectors.any())
.build()
.genericModelSubstitutes(Optional.class, Flux.class, Mono.class);
}
//配置Swagger信息
private ApiInfo apiInfo() {
return new ApiInfo(
"Api Documentation",
"Swagger API文档",
"1.0",
null,
null,
null,
null,
new ArrayList<VendorExtension>());
}
@Bean
public UiConfiguration uiConfig() {
return UiConfigurationBuilder.builder()
// .deepLinking(true)
// .displayOperationId(false)
// 隐藏UI上的Models模块
// .defaultModelsExpandDepth(-1)
// .defaultModelExpandDepth(-1)
// .defaultModelRendering(ModelRendering.MODEL)
// .displayRequestDuration(false)
// .docExpansion(DocExpansion.NONE)
// .filter(false)
// .maxDisplayedTags(null)
// .operationsSorter(OperationsSorter.ALPHA)
// .showExtensions(false)
// .tagsSorter(TagsSorter.ALPHA)
// .validatorUrl(null)
.build();
}
}
4.不加swagger样式
访问地址 http://localhost:8080/swagger-ui/index.html
5.加了swagger样式
访问地址 http://localhost:8080/doc.html