swagger2 2.xx 版本bug太多了,要么显示数据异常,经常报错,最新出来了 3.0 ,果断抛弃 2x系列。看新的接口文档,研究了很久才弄出来,麻烦各位小伙伴点个赞
引入pom文件
这里的引入依赖和以前不一样,现在全新的依赖,是和springboot 相结合
<!-- SpringBoot整合springfox-swagger3 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
config配置文件
@EnableOpenApi
@Configuration
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.OAS_30)
//设置全局接口显示状态码
.globalResponses(HttpMethod.GET,globalResponse())
.globalResponses(HttpMethod.POST,globalResponse())
.globalResponses(HttpMethod.DELETE,globalResponse())
.globalResponses(HttpMethod.PUT,globalResponse())
//设置基础信息
.apiInfo(apiInfo())
.select()
//配置哪些注解
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.apis(RequestHandlerSelectors.any())
.build()
//配置统一授权登录
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
基础信息配置
// API基础信息定义(就是更新Swagger默认页面上的信息)
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger3 接口文档测试")
.description("文档描述:更多问题,请联系开发者")
.contact(new Contact("fangh(name)", "https://swagger.io/docs/specification/describing-parameters/", "335035364@qq.com(email)"))
.version("1.0")
.build();
}
全局状态配置
状态码不需要和我的一致,每个项目定义的状态码不一样,可以根据自己的需求自定义一些状态,我这里只是简单列举一部分可能存在的异常。
public List<Response> globalResponse() {
List<Response> responseMessageList = Lists.newArrayList();
//请求成功
Response successResponse = new ResponseBuilder()
.code(String.valueOf(SysCode.SUCCESS))
.description("request success.")
.isDefault(true)
.build();
responseMessageList.add(successResponse);
//请求失败
Response failResponse = new ResponseBuilder()
.code(String.valueOf(SysCode.FAIL))
.description("request fail.")
.build();
responseMessageList.add(failResponse);
//请求异常
Response exceptionResponse = new ResponseBuilder()
.code(String.valueOf(SysCode.ERROR))
.description("request exception.")
.build();
responseMessageList.add(exceptionResponse);
//登录
SysCode.Login[] logins = SysCode.Login.values();
for (SysCode.Login login : logins) {
Response loginResponse = new ResponseBuilder()
.code(String.valueOf(login.getCode()))
.description(login.getMsg())
.build();
responseMessageList.add(loginResponse);
}
//前端
SysCode.Front[] fronts = SysCode.Front.values();
for (SysCode.Front front : fronts) {
Response frontResp = new ResponseBuilder()
.code(String.valueOf(front.getCode()))
.description(front.getMsg())
.build();
responseMessageList.add(frontResp);
}
//数据库
SysCode.Database[] databases = SysCode.Database.values();
for (SysCode.Database database : databases) {
Response databaseResponse = new ResponseBuilder()
.code(String.valueOf(database.getCode()))
.description(database.getMsg())
.build();
responseMessageList.add(databaseResponse);
}
return responseMessageList;
}
统一授权登录
//设置头
private List<SecurityScheme> securitySchemes() {
return newArrayList(
new ApiKey(AccessToken.getKey(), AccessToken.getKey(), "header"));
}
//设置请求头中携带token
private List<SecurityContext> securityContexts() {
return newArrayList(
SecurityContext.builder()
.securityReferences(defaultAuth())
.build()
);
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return newArrayList(
new SecurityReference("Authorization", authorizationScopes));
}
最终效果