Knife4j 的基本使用说明

本文档详细介绍了如何在SpringBoot项目中集成Knife4j,以生成在线API文档。首先,需要在pom.xml添加依赖,然后创建Knife4jConfig配置类,配置API的基本信息如包名、分组、主机名、标题等。接着,通过@Api和@ApiOperation注解在控制器和方法上添加元数据,以生成详细的接口描述。最后,启用Knife4j的增强模式并在浏览器中访问doc.html查看生成的API文档。通过@ApiOperationSupport注解可以进一步定制接口显示顺序,而@ApiModelProperty则用于自定义参数和响应的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Knife4j 的使用

Knife4j是一款可以提供在线API文档的框架,是基于Swagger框架实现的。

在Spring Boot项目中,使用Knife4j需要添加依赖knife4j-spring-boot-starter

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

​ 然后,需要添加配置,则在boot-demo项目的cn.tedu.boot.demo.config包下创建Knife4jConfig类:

代码配置

​ 完成后启动项目,从浏览器进入localhost:8080.doc.html#/home即可进入


package cn.store.boot.demo.config;

import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {
    /**
     * 【重要】指定Controller包路径(必须修改的包名)
     */
    private String basePackage = "xx.xxxx.boot.demo.controller";
    /**
     * 分组名称
     */
    private String groupName = "product";
    /**
     * 主机名
     */
    private String host = "http://xxxx.xxxx.cn";
    /**
     * 标题
     */
    private String title = "XXX商城在线API文档--商品管理";
    /**
     * 简介
     */
    private String description = "XXX商城在线API文档--商品管理";
    /**
     * 服务条款URL
     */
    private String termsOfServiceUrl = "http://www.apache.org/licenses/LICENSE-2.0";
    /**
     * 联系人
     */
    private String contactName = "XXXXXXXXX";
    /**
     * 联系网址
     */
    private String contactUrl = "http://XXXX.XXXX.cn";
    /**
     * 联系邮箱
     */
    private String contactEmail = "XXXXX@XXXX.cn";
    /**
     * 版本号
     */
    private String version = "1.0.0";

    @Autowired
    private OpenApiExtensionResolver openApiExtensionResolver;

    @Bean
    public Docket docket() {
        String groupName = "1.0.0";
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .host(host)
                .apiInfo(apiInfo())
                .groupName(groupName)
                .select()
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                .paths(PathSelectors.any())
                .build()
                .extensions(openApiExtensionResolver.buildExtensions(groupName));
        return docket;
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(title)
                .description(description)
                .termsOfServiceUrl(termsOfServiceUrl)
                .contact(new Contact(contactName, contactUrl, contactEmail))
                .version(version)
                .build();
    }

}

​ 注意:必须修改以上配置中的包名,保证是当前项目中控制器类所在的包!其它各项均可不修改,以上配置代码可以从Knife4j的官网找到!

最后,还需要在配置文件中开启Knife4j的增强模式:

# Knife4j配置
knife4j:
  # 是否开启增强模式
  enable: true

完成后,启动项目,在浏览器中访问 http://localhost:8080/doc.html 即可查看当前项目的API文档。

在控制器类上添加@Api注解,并配置tags属性,可以指定模块名称,例如:

@Api(tags = "管理员管理模块")
@RestController
@RequestMapping(value = "/admins", produces = "application/json; charset=utf-8")
public class AdminController {
    XXXXXXXX
}

在处理请求的方法上添加@ApiOperation注解可以配置业务名称,例如:

@ApiOperation("管理员登录") // 新增
@PostMapping("/login")
public JsonResult<AdminSimpleVO> login(@Validated AdminLoginDTO adminLoginDTO) {
    AdminSimpleVO adminSimpleVO = adminService.login(adminLoginDTO);
    return JsonResult.ok(adminSimpleVO);
}

当需要指定各业务在API文档中的显示顺序时,可以在处理请求的方法上添加@ApiOperationSupport注解,配置此注解的order属性,最终在显示API文档时,会根据order属性值升序排列,例如:

@ApiOperation("管理员登录")
@ApiOperationSupport(order = 900) // 新增
@PostMapping("/login")
public JsonResult<AdminSimpleVO> login(@Validated AdminLoginDTO adminLoginDTO) {
    AdminSimpleVO adminSimpleVO = adminService.login(adminLoginDTO);
    return JsonResult.ok(adminSimpleVO);
}

通常,建议以上配置的order值至少是2位的数字,并且有预留位置,例如1019之间的都是增加数据的业务,2029之间的都是删除数据的业务,3039之间都是修改数据的业务,4049之间都是查询数据的业务。

如果控制器处理请求的方法的参数是自定义的封装类型,可以在封装类型的属性上添加@ApiModelProperty来配置参数在文档中的显示,例如:

package cn.tedu.boot.demo.pojo.dto;


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

import javax.validation.constraints.NotNull;
import java.io.Serializable;

@Data
public class AdminLoginDTO implements Serializable {

    @ApiModelProperty(value = "用户名") // 配置参数名
    private String username;
    
    @ApiModelProperty("密码") // 配置参数名
    private String password;

}

以上@ApiModelProperty除了可以配置参数在API文档中显示的名称以外,还可以配置是否必须,例如:

@ApiModelProperty(value = "用户名", required = true)

另外,还可以配置参数类型等,但是,并不是必须配置,通常框架可以正常自动识别。

对于部分名称可能比较特殊(一般人直接看不懂)的属性,或者对值的规范性要求比较明确(例如某些取值为0或1)的属性,可以列举示例,使得查看API文档的人可以参考,例如:

@ApiModelProperty(value = "用户名", required = true, example = "admin")

除以配置请求参数以外,此属性还可以用于响应结果的类型,例如:

public class JsonResult implements Serializable {

@ApiModelProperty("业务状态码")
private Integer state;

@ApiModelProperty("消息")
private String message;

@ApiModelProperty("数据")
private T data;

// ......

如果以上private T data;的实际值也需要添加说明,则在对应的类的属性上继续使用@ApiModelProperty配置即可!需要注意:此处data属性可以是任意数据类型,必须声明为泛型,不可以是Object,否则将无法应用@ApiModelProperty的配置。

另外,当添加在响应的类型的属性上时,还可以在@ApiModelProperty注解中配置position属性,用于设置各属性在响应的JSON中的显示顺序,例如:

@ApiModelProperty(value = "业务状态码", position = 5)
<think>好的,我现在需要回答用户关于如何集成和使用Knife4j的问题。首先,用户可能想了解Knife4j是什么,以及它的作用。根据引用[4],Knife4j是Swagger的增强解决方案,用于生成API文档,前身是swagger-bootstrap-ui,轻量且功能强大。所以,我应该先介绍Knife4j基本信息。 接下来,用户需要具体的集成步骤。根据引用[3]和[5],在Spring Boot项目中集成Knife4j需要添加依赖项,比如Maven的pom.xml中加入knife4j-spring-boot-starter。引用[3]还提到Knife4j会自动引入Swagger依赖,所以不需要额外添加Swagger。这点很重要,要明确告诉用户。 然后是配置SwaggerConfig。引用[3]和[5]都提到了创建配置类,使用@EnableSwagger2和@EnableKnife4j注解。需要详细说明如何配置Docket bean,设置API分组、路径过滤等。这里可能需要代码示例,比如如何定义Docket,并配置ApiInfo的信息。 安全方面,引用[2]指出Knife4j可能存在安全隐患,需要添加访问控制。例如在Spring Security中配置拦截,或者添加登录认证。这部分用户可能容易忽略,所以需要提醒他们注意安全性,特别是生产环境中。 基本使用部分,引用[1]和[4]提到通过注解如@Api、@ApiOperation来修饰Controller和接口,这样Knife4j才能生成文档。需要举例说明这些注解的用法,并说明访问Knife4j UI的路径,通常是/doc.html。 可能用户会遇到问题,比如依赖冲突或路径无法访问,需要给出常见问题解决方法。例如检查依赖版本,或者调整Spring Boot的版本,引用[3]提到在2.6.4版本中的使用情况。 最后,生成相关问题,参考用户提供的示例,要围绕集成步骤、安全配置、注解使用和优化展开。确保问题有针对性,帮助用户进一步学习。 总结回答的结构:先介绍Knife4j,再分步骤讲解集成方法,包括依赖、配置、安全,然后说明基本使用和常见问题,最后相关问题。确保每个部分引用正确的来源,比如引用[3]和[5]关于依赖和配置,引用[2]关于安全,引用[4]关于定义。</think>### Knife4j集成与使用教程 #### 一、Knife4j简介 Knife4j是为Java MVC框架集成Swagger生成API文档的增强工具,前身为`swagger-bootstrap-ui`,以轻量化和功能强大为特点[^4]。它通过美化Swagger原生界面,提供更直观的接口文档展示和调试功能。 --- #### 二、Spring Boot项目集成步骤 1. **添加依赖** 在项目的`pom.xml`中添加Knife4j依赖(以Spring Boot 2.6.4为例): ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> ``` Knife4j会自动引入Swagger依赖,无需额外配置[^3][^5]。 2. **配置SwaggerConfig** 创建配置类`SwaggerConfig.java`: ```java @Configuration @EnableSwagger2 @EnableKnife4j public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) // 指定扫描的Controller包 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API文档") .description("接口说明") .version("1.0") .build(); } } ``` 3. **安全控制(可选)** 若需限制访问权限(如生产环境),可在Spring Security中添加配置: ```java @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/doc.html").authenticated() // 需登录才能访问Knife4j .and().formLogin(); } ``` 避免接口文档地址泄露导致安全隐患[^2]。 --- #### 三、基本使用方法 1. **添加注解描述接口** - 在Controller类上添加`@Api(tags = "用户模块")`。 - 在接口方法上添加`@ApiOperation("查询用户列表")`[^1]。 ```java @RestController @Api(tags = "用户模块") public class UserController { @GetMapping("/users") @ApiOperation("查询用户列表") public List<User> getUsers() { // 业务逻辑 } } ``` 2. **访问Knife4j界面** 启动项目后,通过以下URL访问: ``` http://localhost:端口号/doc.html ``` --- #### 四、常见问题 1. **依赖冲突** 检查Swagger相关依赖版本是否与Knife4j兼容,建议使用Knife4j官方推荐的版本。 2. **无法访问/doc.html** 确认是否配置了`@EnableKnife4j`注解,并检查Spring Security是否拦截了路径。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值