使用knife4j生成接口文档

721 阅读1分钟

第一步:准备在pom.xml中添加依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

<!-- knife4j -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

第二步编写配置类 SwaggerConfig 并在上面添加注解 @EnableOpenApi

@Configuration @EnableOpenApi public class SwaggerConfig {

/**
 * 创建API
 */
@Bean
public Docket createRestApi() {
    return new Docket(DocumentationType.OAS_30)
            // 是否启用Swagger
            .enable(true)
            // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
            .apiInfo(apiInfo())
            // 设置哪些接口暴露给Swagger展示
            .select()
            // 扫描所有有注解的api,用这种方式更灵活
            // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
            // 扫描指定包中的swagger注解
            .apis(RequestHandlerSelectors.basePackage("com.xxx"))
            // 扫描所有 .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            /* 设置安全模式,swagger可以设置访问token */
            .securitySchemes(securitySchemes())
            .securityContexts(securityContexts());
}

/**
 * 安全模式,这里指定token通过Authorization头请求头传递
 */
private List<SecurityScheme> securitySchemes() {
    List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
    apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
    return apiKeyList;
}

/**
 * 安全上下文
 */
private List<SecurityContext> securityContexts() {
    List<SecurityContext> securityContexts = new ArrayList<>();
    securityContexts.add(
            SecurityContext.builder()
                    .securityReferences(defaultAuth())
                    .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
                    .build());
    return securityContexts;
}

/**
 * 默认的安全上引用
 */
private List<SecurityReference> defaultAuth() {
    AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
    authorizationScopes[0] = authorizationScope;
    List<SecurityReference> securityReferences = new ArrayList<>();
    securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
    return securityReferences;
}

/**
 * 添加摘要信息
 */
private ApiInfo apiInfo() {
    // 用ApiInfoBuilder进行定制
    return new ApiInfoBuilder()
            // 设置标题
            .title("标题:CRM系统_接口文档")
            // 描述
            .description("")
            // 作者信息
            .contact(new Contact("ccc", null, null))
            // 版本
            .version("版本号:" + 1.0)
            .build();
}

第三步 编写controller类

@RestController
@RequestMapping(value = "/cadreDynamics")
@Slf4j
@Api(tags = "干部在线动态")
public class CadreDynamicsController {

    @Resource
    private CadreDynamicsService cadreDynamicsService;

    @GetMapping("/list")
    @ApiOperation(value = "获取干部动态列表", notes = "获取干部动态列表")
    public List<CadreDynamics> list(){
       return cadreDynamicsService.list();
    }

第四步 http://localhost:8081/doc.html就可以测试了 效果图如下是不是比swagger自带的效果图好看太多了

image.png