Knife4j_接口概述、常用注解详解、搭建swagger项目、功能概述

①. knife4j的概述

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

  • ②. 官方文档地址

  • ③. http://ip:port/doc.html

在这里插入图片描述

②. knife4j核心功能

  • ①. 文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。

  • ②. 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。

  • ③. 个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息

  • ④. 离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件

  • ⑤. 接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接

③. 从0开始搭建knife4j项目

  • ①. pom文件引入
<properties>
    <knife4j.version>2.0.9</knife4j.version>
    <lombok.version>1.18.12</lombok.version>
</properties>
 <dependencies>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>${knife4j.version}</version>
        </dependency>
        <!--web场景-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.80</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
  • ②. 配置类 - SwaggerConfig
@Configuration
@EnableSwagger2WebMvc
// @ConditionalOnExpression(value = "'develop'.equals('${spring.cloud.nacos.config.namespace}') or 'testing'.equals('${spring.cloud.nacos.config.namespace}')")
public class SwaggerConfig {
    @Bean(value = "swaggerBean")
    public Docket swaggerBean() {
        //指定使用Swagger2规范
        List<Parameter> pars = new ArrayList<>();
        //暂无需token校验
        //pars.add(new ParameterBuilder().name("token").description("认证token").modelRef(new ModelRef("string")).parameterType("header").build());
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("swagger测试查询")
                        //描述字段支持Markdown语法
                        .description("swagger测试查询系统")
                        .contact(new Contact("tangzhi", "", "845195485@qq.com"))
                        .version("1.0")
                        .build())
                //分组名称
                .groupName("ssm-test-inquire")
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.xiaozhi.swagger"))
                .paths(PathSelectors.any())
                .build().globalOperationParameters(pars);
    }
}
  • ③. 测试 - http://ip:port/doc.html
    在这里插入图片描述

④. 常用注解 - Api

  • ①. @Api注解用于标注一个ControllerClass)在默认情况下,Swagger-Core只会扫描解析具有@Api注解的类,而会自动忽略其他类别资源JAX-RS endpoints,Servlets等等的注解
属性解释
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
valueurl的路径值
basePath基本路径可以不配置
position如果配置多个Api想改变显示的顺序位置
producesFor example, “application/json, application/xml”
consumesFor example, “application/json, application/xml”
protocolsPossible values: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true将在文档中隐藏
@Controller
@Slf4j
@RequestMapping("/xxx")
@Api(tags = "人员信息API", description = "提供人员信息相关的Rest API")
public class XxxController{
 
}
  • ②. 案例演示 - 建议在配置的tags属性值上添加序号,例如:“01. 用户模块”、“02. 微博模块”,则框架会根据值进行排序
// 1. UserController
@Api(tags = "01.用户管理模块")
public class UserController {...}

// 2. WeiboController
@Api(tags = "02.微博管理模块")
public class WeiboController {...}

// 3. CommentController
@Api(tags = "03.评论管理模块")
public class CommentController {...}

在这里插入图片描述

④. @ApiOperation注解

  • ①. @ApiOperation注解在用于对一个操作或HTTP方法进行描述。具有相同路径的不同操作会被归组为同一个操作对象。不同的HTTP请求方法及路径组合构成一个唯一操作
属性解释
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
basePath基本路径可以不配置
position如果配置多个Api 想改变显示的顺序位置
producesFor example, “application/json, application/xml”
consumesFor example, “application/json, application/xml”
protocolsPossible values: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true将在文档中隐藏
response返回的对象
responseContainer这些对象是有效的 “List”, “Set” or “Map”.,其他无效
httpMethod“GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH”
  • ②. 此处以注册功能为例,其他所有方法请添加说明
/**注册功能*/
@RequestMapping("reg")
@ApiOperation(value = "注册功能")
public int reg(@RequestBody UserRegDTO userRegDTO){...}

在这里插入图片描述

⑤. @ApiModelProperty注解

  • ①. 添加在POJO类的属性上的注解,用于对请求参数或响应结果中的某个属性进行说明,主要通过其value属性配置描述文本,并可通过example属性配置示例值

  • ②. 参数说明

  1. value属性:配置参数名称
  2. required属性:配置是否必须提交此请求参数
  3. example属性:配置示例值
    注意:如果配置了 required=true,只是一种显示效果,Knife4j框架并不具备检查功能
  • ③. 案例演示
@Data
public class UserRegDTO {
    @ApiModelProperty(value = "用户名", required = true, example = "赵丽颖")
    private String username;
    @ApiModelProperty(value = "密码", required = true)
    private String password;
    @ApiModelProperty(value = "昵称", required = true)
    private String nickname;
}

在这里插入图片描述

⑥. @ApiImplicitParam注解

  • ①. 添加在控制器类中处理请求的方法上的注解,主要用于配置非封装(非XxxDTO/XxxParam的参数)的参数

  • ②. 参数说明

  1. name:指定参数名称参数变量名
  2. value:配置参数名称
  3. dataType:配置数据类型
  4. required:配置是否必须提交此请求参数
  5. example:配置参数的示例值
    注意:一旦使用此注解,各个参数的数据类型默认都会显示String,可以通过dataType指定数据类型
  • ③. 案例演示
@ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int")
public WeiboDetailVO selectById(int id){...}

在这里插入图片描述

⑦. @ApiImplicitParams注解

  • ①. 添加在控制器类中处理请求的方法上的注解,当方法有多个非封装的参数时,在方法上添加此注解,并在注解内部通过@ApiImplicitParam数组配置多个参数

  • ②. 此处以微博详情功能为例

/**微博详情页功能*/
@GetMapping("selectById")
@ApiOperation(value = "微博详情功能")
@ApiImplicitParams(value = {
    @ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int"),
    @ApiImplicitParam(name = "username", value = "用户名", required=true)
})
// 额外增加username参数,仅仅用于测试
public WeiboDetailVO selectById(int id, String username){
    return weiboMapper.selectById(id);
}

在这里插入图片描述

⑧. 限制请求方式

  • ①. API文档中默认每个功能会展示7种请求方式,遵循RESTful规则将 @RequestMapping 注解修改为对应请求方法的注解,比如:@GetMapping @PostMapping @PutMapping @DeleteMapping 注解,重启工程后刷新测试
    在这里插入图片描述

⑨. 导出离线API文档

  • 文档管理 - 离线文档 中存在多种格式的导出格式
    在这里插入图片描述
Knife4j常用的注解包括: 1. @Api:用于对Controller类添加API文档的说明和描述。可以在类级别使用,表示该类是一个API资源。 2. @ApiOperation:用于对Controller中的方法添加API操作的说明和描述。可以在方法级别使用,表示该方法是一个API操作。 3. @ApiParam:用于对Controller中方法的参数添加API参数的说明和描述。可以在方法参数级别使用,表示该参数是一个API参数。 4. @ApiImplicitParam:和@ApiParam类似,用于对Controller中的方法参数添加API参数的说明和描述。可以在方法参数级别使用,表示该参数是一个API参数。 5. @ApiModel:用于对实体类添加API模型的说明和描述。可以在类级别使用,表示该类是一个API模型。 6. @ApiModelProperty:用于对实体类的属性添加API属性的说明和描述。可以在属性级别使用,表示该属性是一个API属性。 例如,在使用Knife4j时,可以使用@Api注解来标注Controller类,使用@ApiOperation注解来标注Controller中的方法,使用@ApiParam注解来标注方法参数,使用@ApiModel注解来标注实体类,使用@ApiModelProperty注解来标注实体类的属性。这样可以为API文档添加详细的说明和描述,提高接口文档的可读性和可理解性。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Knife4j注解说明](https://blog.csdn.net/qq_46126559/article/details/118487809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [swagger2(knife4j) 注解说明](https://blog.csdn.net/leaf__yang/article/details/126279902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所得皆惊喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值