SpringBoot集成swagger实例分析
导读:本文共3978.5字符,通常情况下阅读需要13分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:2.5 替换UI上面的整个过程已经完成了,但是生成的接口文档的页面,其实很多人不太喜欢,觉得不太符合国人的使用习惯,所有又有一些大神,提供了其他的UI测试页面。这个页面的使用还是比较广泛的。修改方式:只需引入一个依赖包:<dependency><groupId>com.github.xiaoymin</groupId><artifactId>sw... ...
目录
(为您整理了一些要点),点击可以直达。2.5 替换UI
上面的整个过程已经完成了,但是生成的接口文档的页面,其实很多人不太喜欢,觉得不太符合国人的使用习惯,所有又有一些大神,提供了其他的UI测试页面。这个页面的使用还是比较广泛的。
修改方式:只需引入一个依赖包:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
然后把刚才实现的那个的那个方法再添加一条:
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
完成代码:
packagecom.lsqingfeng.springboot.config;importcom.lsqingfeng.springboot.interceptor.TokenInterceptor;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;
importorg.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*
@className:WebMvcConfig
@description:webMvc配置
@author:sh.Liu
@date:2022-01-1309:51
/
@Configuration
publicclassWebMvcConfigimplementsWebMvcConfigurer{//@Override
//publicvoidaddInterceptors(InterceptorRegistryregistry){
////拦截
//registry.addInterceptor(newTokenInterceptor())
//.addPathPatterns("/**")
//.excludePathPatterns("/login");
//}@Override
publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){
registry.addResourceHandler("/").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
}
}
重新启动项目: 访问路径发生了变化: ip:端口号/doc.html
页面出现了。我们在看看我们的用户接口:
这个风格确实更加的直观,同时也是可以直接进行调试的。大部分的swagger都用的这个风格的文档。
三. SpringBoot集成swagger3
上面已经很详细的讲解了swagger2的集成方式,而swagger3的集成方式更加的简洁一些。
首先引入依赖:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
然后是替换注解: swagger2使用的开启注解是: @EnableSwagger2
而在swagger3中,这个注解要换成: @EnableOpenApi
配置类:
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importspringfox.documentation.builders.RequestHandlerSelectors;
importspringfox.documentation.oas.annotations.EnableOpenApi;
importspringfox.documentation.spi.DocumentationType;
importspringfox.documentation.spring.web.plugins.Docket;@Configuration
publicclassSwaggerConfig{
@Bean
publicDocketcreateRestApi(){
returnnewDocket(DocumentationType.OAS_30)//v2不同
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.swaggerv3.controller"))//设置扫描路径
.build();
}
}
要注意,里边的版本类型换成了 OAS_30, 就是swagger3的意思。
OAS 是 OpenAPI Specification 的简称,翻译成中文就是 OpenAPI 说明书。
同时访问地址:原始地址,也就是没换UI的地址: localhost:8080/swagger-ui/index.html这个要和swagger2区分开。
swagger3的原始UI风格也发生了一些变化:
同时swagger3也是可以更换UI的。方法和swagger2一样。
四. swaggerUI 拦截器和跨域冲突处理
如果我们的项目中有关于跨域的处理,同时还有拦截器,然后还要使用swagger,这种情况大家要注意了,有可能我们的拦截器会将swagger中的页面路径拦截掉导致swagger页面出不来,当我们在拦截器中把swagger的页面排除掉的时候,也有可能会导致跨域配置的失效。
具体解决方案简单提一下:
拦截器:
/*
拦截器配置
@authorliuShuai
*/
@Configuration
publicclassInterceptorConfigimplementsWebMvcConfigurer{@Bean
publicTokenInterceptortokenInterceptor(){
returnnewTokenInterceptor();
}@Override
publicvoidaddInterceptors(InterceptorRegistryregistry){
registry
.addInterceptor(tokenInterceptor())
.addPathPatterns("/")
.excludePathPatterns("/user/login")
.excludePathPatterns("/user/downloadExcel")
.excludePathPatterns("/swagger-resources/","/webjars/","/v2/","/swagger-ui.html/**");
}@Override
publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
跨域配置:
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.cors.CorsConfiguration;
importorg.springframework.web.cors.UrlBasedCorsConfigurationSource;
importorg.springframework.web.filter.CorsFilter;/*
@className:CorsConfig
@description:
@author:sh.Liu
@date:2020-12-0210:16
/
@Configuration
publicclassCorsConfig{@Bean
publicCorsFiltercorsFilter(){
CorsConfigurationconfig=newCorsConfiguration();
config.addAllowedOrigin("");
config.setAllowCredentials(true);
config.addAllowedMethod("");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSourceconfigSource=newUrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**",config);
returnnewCorsFilter(configSource);
}
}
用这两种方式去配置,就可以让他们和平共处了。
另: 配套项目代码已托管中gitCode: gitcode.net/lsqingfeng/…
分支: feautre/MybatisPlus
相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。SpringBoot集成swagger实例分析的详细内容,希望对您有所帮助,信息来源于网络。