Swagger 与 knife4j 实战指南

在 RESTful 风格的 Web 服务开发过程中,接口文档的编写、维护以及接口测试是至关重要的环节。Swagger 作为一款成熟的接口文档生成框架,能够完美解决接口文档自动生成、可视化调用等问题,极大提升前后端协作效率。而 Springfox 的出现,让 Swagger 能够无缝集成到 Spring 项目中。在此基础上,knife4j 作为增强解决方案,凭借小巧轻量、功能强悍的特性,成为当前 Java MVC 框架集成 Swagger 的优选工具。本文将以苍穹外卖项目为例,详细介绍 knife4j 的集成步骤、核心注解使用方法,并厘清 Swagger 与 Yapi 的核心区别,帮助开发者全面掌握接口文档的构建与优化技巧。

介绍

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是:

  1. 使得前后端分离开发更加方便,有利于团队协作

  2. 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担

  3. 功能测试

Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!

目前,一般都使用knife4j框架。

使用步骤

1. 导入 knife4j 的maven坐标
在pom.xml中添加依赖
    <dependency>  
       <groupId>com.github.xiaoymin</groupId>  
       <artifactId>knife4j-spring-boot-starter</artifactId>  
    </dependency>
2.在配置类中加入 knife4j 相关配置

项目的配置类 WebMvcConfiguration 负责管理 Web 相关的配置信息,此处需创建 Docket 实例来配置 Swagger 文档的核心信息。Docket 是 Swagger 的核心配置类,通过它可以设置文档标题、版本、描述,以及指定接口扫描范围等。具体配置代码如下:

WebMvcConfiguration.java

@Configuration
public class WebMvcConfiguration {
    /**
     * 通过knife4j生成接口文档
     * 该方法创建并返回Docket实例,封装了接口文档的全部配置信息
     * @return Docket 接口文档配置实例
     */
    @Bean
    public Docket docket() {
        // 构建接口文档的基本信息,包括标题、版本、描述
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("苍穹外卖项目接口文档")  // 文档标题,清晰标识文档所属项目
                .version("2.0")  // 文档版本,便于后续文档迭代管理
                .description("苍穹外卖项目接口文档,包含员工管理、菜品管理等核心业务接口")  // 文档描述,简要说明文档用途
                .build();
        
        // 构建Docket实例,指定文档类型为SWAGGER_2
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)  // 关联上述构建的接口文档基本信息
                .select()
                // 指定扫描的接口包路径,仅扫描com.sky.controller包下的控制器接口
                .apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
                .paths(PathSelectors.any())  // 匹配所有接口路径,不进行路径过滤
                .build();
        return docket;
    }
}
3. 设置静态资源映射,否则接口文档页面无法访问

WebMvcConfiguration.java

knife4j 的接口文档页面依赖特定的静态资源(如 HTML、CSS、JS 文件等),默认情况下 Spring Boot 不会自动映射这些资源,导致文档页面无法正常访问。因此,需在 WebMvcConfiguration 配置类中重写 addResourceHandlers 方法,手动配置静态资源映射路径。具体代码如下:

public class WebMvcConfiguration extends WebMvcConfigurationSupport {
    /**
     * 设置静态资源映射,确保knife4j接口文档页面的相关资源能够被正常访问
     * @param registry 资源映射注册器,用于注册资源访问路径与实际存储路径的映射关系
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射文档页面的访问路径/doc.html到类路径下的/META-INF/resources/目录
        registry.addResourceHandler("/doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        // 映射webjars相关资源的访问路径/webjars/**到类路径下的/META-INF/resources/webjars/目录
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}
4. 访问测试

完成上述配置后,启动苍穹外卖项目的服务,即可通过指定路径访问接口文档页面进行测试。接口文档的访问路径遵循 “http://ip: 端口 /doc.html” 的格式,若项目部署在本地,端口号为 8080,则访问路径为http://localhost:8080/doc.html 。访问成功后,页面会显示苍穹外卖项目接口文档的主页,包含文档简介、版本、作者等信息,同时可查看项目中的接口列表,如员工登录、退出等接口,并能直接在页面中进行接口测试操作。例如,点击员工登录接口,可进入测试页面,填写请求参数后发送请求,查看接口的响应结果。

接口文档访问路径为 http://ip:port/doc.html —> [http://localhost:8080/doc.html]

(http://localhost:8080/doc.html)

在这里插入图片描述

接口测试:测试登录功能
在这里插入图片描述

**思考:通过 Swagger 就可以生成接口文档,那么我们就不需要 Yapi 了?

1、Yapi 是设计阶段使用的工具,管理和维护接口

2、Swagger 在开发阶段使用的框架,帮助后端开发人员做后端的接口测试

常用注解

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

注解说明
@Api用在类上,例如Controller,表示对类的说明
@ApiModel用在类上,例如entity、DTO、VO
@ApiModelProperty用在属性上,描述属性信息
@ApiOperation用在方法上,例如Controller的方法,说明方法的用途、作用

使用案例

接下来,使用上述注解,生成可读性更好的接口文档

在sky-pojo模块中

EmployeeLoginDTO.java

package com.sky.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

@Data
@ApiModel(description = "员工登录时传递的数据模型")
public class EmployeeLoginDTO implements Serializable {

    @ApiModelProperty("用户名")
    private String username;

    @ApiModelProperty("密码")
    private String password;

}

EmployeeLoginVo.java



@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "员工登录返回的数据格式")
public class EmployeeLoginVO implements Serializable {

    @ApiModelProperty("主键值")
    private Long id;

    @ApiModelProperty("用户名")
    private String userName;

    @ApiModelProperty("姓名")
    private String name;

    @ApiModelProperty("jwt令牌")
    private String token;

}

在sky-server模块中

EmployeeController.java


/**
 * 员工管理
 */
@RestController
@RequestMapping("/admin/employee")
@Slf4j
@Api(tags = "员工相关接口")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;
    @Autowired
    private JwtProperties jwtProperties;

    /**
     * 登录
     *
     * @param employeeLoginDTO
     * @return
     */
    @PostMapping("/login")
    @ApiOperation(value = "员工登录")
    public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) 	{
        //..............

        
    }

    /**
     * 退出
     *
     * @return
     */
    @PostMapping("/logout")
    @ApiOperation("员工退出")
    public Result<String> logout() {
        return Result.success();
    }

}

添加注解后,重启服务访问接口文档页面,可看到员工相关接口的分类更加清晰,每个接口的参数、返回值含义一目了然,极大提升了接口文档的可读性和实用性。

启动服务:访问http://localhost:8080/doc.html
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值