首页 > 其他分享 >Swagger系列:SpringBoot3.x中使用Knife4j

Swagger系列:SpringBoot3.x中使用Knife4j

时间:2023-10-18 22:35:10浏览次数:35  
标签:Knife4j 2.0 String swagger SpringBoot3 import Swagger public

目录

一、简介

官网:https://doc.xiaominfo.com/

Knife4j是一个集Swagger2 和 OpenAPI3 为一体的增强解决方案

Knife4j 是为 Java MVC 框架集成 Swagger 生成 Api 文档的增强解决方案,前身是 swagger-bootstrap-ui,致力于 springfox-swagger 的增强 UI 实现。knife4j 为了契合微服务的架构发展,由于原来 swagger-bootstrap-ui 采用的是后端 Java 代码 + 前端 UI 混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为 knife4j,更名后主要专注的方面如下:

  • 后端 Java 代码以及前端 UI 模块进行了分离,在微服务架构下使用更加灵活
  • 提供专注于 Swagger 的增强解决方案,不同于只是单纯增强前端 UI 部分

二、版本说明

版本 说明
1.0~1.9.6 名称是叫swagger-bootstrap-ui,蓝色风格Ui
1.9.6 蓝色皮肤风格,开始更名,增加更多后端模块
2.0~2.0.5 Ui基于Vue2.0+AntdV重写,黑色风格,参考示例,底层依赖的springfox框架版本是2.9.2,仅提供Swagger2规范的适配
2.0.6~2.0.9 底层springfox框架版本升级知2.10.5,,仅提供Swagger2规范的适配
3.0~3.0.3 底层依赖springfox框架版本升级至3.0.3,OpenAPI规范是v3,过度版本,建议开发者不要使用
4.0~ 区分OpenAPI2和Swagger3的Maven坐标artifactId OpenAPI2规范服务端解析框架稳定在springfox2.10.5 OpenAPI3框架服务端解析跟随springdoc项目更新迭代 建议开发者使用该版本,请参考4.x升级文档

Spring Boot版本兼容性

Spring Boot版本 Knife4j Swagger2规范 Knife4j OpenAPI3规范
1.5.x~2.0.0 <Knife4j 2.0.0 >=Knife4j 4.0.0
2.0~2.2 Knife4j 2.0.0 ~ 2.0.6 >=Knife4j 4.0.0
2.2.x~2.4.0 Knife4j 2.0.6 ~ 2.0.9 >=Knife4j 4.0.0
2.4.0~2.7.x >=Knife4j 4.0.0 >=Knife4j 4.0.0
>= 3.0 >=Knife4j 4.0.0 >=Knife4j 4.0.0

Swagger2规范OpenAPI3规范的说明

nife4j版本 Swagger2规范 OpenAPI3规范 说明
1.0~1.9.6 springfox 2.9.2 Knife4j的前身,名称为swagger-bootstrap-ui
1.9.6~2.0.5 springfox 2.9.2
2.0.6~2.0.9 springfox 2.10.5
3.0.0~3.0.3 springfox 3.0.3 过度版本,建议开发者不要使用
4.0.0~ springfox 2.10.5 >=springdoc-openapi 1.6.9 Swagger2规范稳定使用springfox2.10.5保持不变。开发者应该尽早迁移到OpenAPI3规范上来,请参考4.x升级文档

三、使用

1.引入依赖

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

2.编写配置类

package com.mcode.knife4jdemo.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * ClassName: Knife4jConfig
 * Package: com.mcode.knife4jdemo.config
 * Description:
 *
 * @Author: robin
 * @Version: v1.0
 */
@Configuration
public class Knife4jConfig {
    @Bean
    public GroupedOpenApi adminApi() {      // 创建了一个api接口的分组
        return GroupedOpenApi.builder()
                .group("admin-api")         // 分组名称
                .pathsToMatch("/admin/**")  // 接口请求路径规则
                .build();
    }
    @Bean
    public OpenAPI openAPI(){
        return new OpenAPI()
                .info(new Info()
                        .title("Knife4j标题")
                        .description("Knife4j说明")
                        .version("v1")
                        .contact(new Contact().name("robin").email("[email protected]"))
                        .license(new License().name("Apache 2.0").url("http://springdoc.org"))
                );

    }
}

3.编写User类用作模型

package com.mcode.knife4jdemo.entity;

import io.swagger.v3.oas.annotations.media.Schema;

/**
 * ClassName: User
 * Package: com.mcode.knife4jdemo.entity
 * Description:
 *
 * @Author: robin
 * @Version: v1.0
 */
@Schema(description = "用户实体")
public class User {
    @Schema(description = "用户名称")
    private String userName;
    @Schema(description = "密码")
    private String password;
    @Schema(description = "邮箱")
    private String email;

    @Schema(description = "年龄")
    private int age;


    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User() {
    }

    public User(String userName, String password, String email, int age) {
        this.userName = userName;
        this.password = password;
        this.email = email;
        this.age = age;
    }
}

4.编写控制器

package com.mcode.knife4jdemo.controller;

import com.mcode.knife4jdemo.entity.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

/**
 * ClassName: IndexController
 * Package: com.mcode.knife4jdemo.controller
 * Description:
 *
 * @Author: robin
 * @Version: v1.0
 */
@RestController
@Tag(name = "首页")
@RequestMapping("/admin/index")
public class IndexController {
    @Operation(summary = "获取用户")
    @GetMapping("/getUser")
    public User getUser( @Parameter(name = "userName",description = "用户名称",in = ParameterIn.QUERY)String userName) {
        return new User(userName, "123456", "[email protected]", 18);
    }
    @Operation(summary = "新增用户")
    @PostMapping("/addUser")
    public Boolean addUser(@RequestBody  User user) {
        return true;
    }
}

SpringDoc注解具体可看:https://www.cnblogs.com/vic-tory/p/17690501.html

四、效果图

首页

image

控制器

image

标签:Knife4j,2.0,String,swagger,SpringBoot3,import,Swagger,public
From: https://www.cnblogs.com/vic-tory/p/17773531.html

相关文章

  • SpringCloudGateway网关整合swagger3+Knife4j3,basePath丢失请求404问题
    很多人都是照着别人的文章粘代码,我也是粘的,但是这样粘也会有问题,我搞这个Knife4j3的时候遇到两个问题,这里记录一下:第一个是basePath丢失,第二个解决basePath丢失完又引发了会引起application/json数据类型参数示例的问题。在集成SpringCloudGateway网关的时候,会出现没有basePat......
  • ABP中关于Swagger的一些配置
    Abp集成Swagger官方文档,请参考SwaggerIntegrationAspNetCore配置Swagger,请参考Swashbuckle.AspNetCore本文的项目环境是AspNetCore6.0+Volo.Abp.Swashbuckle6.0.2Abp中默认的基础配置如下:publicoverridevoidConfigureServices(ServiceConfigurati......
  • 使用Swagger的好处
    是一个规范和完整的框架用于生成、描述、调用和可视化RESTful风格的Web服务接口的文档在线自动生成功能测试......
  • fastapi手动添加swagger文档描述
    fastapi手动添加swagger文档描述"""在正常开发过程中,fastapi会自动地将正确响应(status=200)和输入校验失败响应(status=422)添加到文档中.当有自定义的响应描述添加到文档中时,就需要我们手动添加到路径函数的:responses参数中.用户可以按照openapi的语法,将响应的描述信息添加......
  • fastapi swagger文档无法渲染问题
    由于fastapi默认使用国外的cdn获得支持swagger文档的js和css文件,所以在国内,/docs接口渲染不出来.解决方法1#在app生效之前,将生成swagger文档的方法替换掉.(在fastapi为:fastapi.openapi.docs.get_swagger_ui_html)​fromfastapiimportFastAPI,applicationsfromfa......
  • SpringBoot 2.7.x 整合 swagger2 冲突问题
    问题描述SpringBoot2.7.x版本在整合swagger2时抛出异常如下:复制代码org.springframework.context.ApplicationContextException:Failedtostartbean'documentationPluginsBootstrapper';nestedexceptionisjava.lang.NullPointerException atorg.springframework......
  • swagger2启动报错
    1.添加注解:@EnableSwagger2注解能将swagger的配置文件导入ioc容器,使用容器管理swagger相关的各种核心类,并使我们能通过yml或properties文件能修改默认配置:@Import({Swagger2DocumentationConfiguration.class})public@interfaceEnableSwagger2{}...@EnableSwagger2能......
  • swagger介绍以及使用
    目前的项目基本都是前后端分离,后端为前端提供接口的同时,还需同时提供接口的说明文档。但我们的代码总是会根据实际情况来实时更新,这个时候有可能会忘记更新接口的说明文档,造成一些不必要的问题。说的直白点,swagger就是帮你写接口说明文档的。简单地使用swagger只需要三步。1、......
  • ElasticSearch8.10.2接入SpringBoot3.+
    pom.xml文件引入依赖 <!--https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-client--> <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> &l......
  • Swagger与SpringBoot冲突
    SpringBoot版本2.7.15,Swagger版本2.9.2集成Swagger时报错,报错信息如下org.springframework.context.ApplicationContextException:Failedtostartbean'documentationPluginsBootstrapper';nestedexceptionisjava.lang.NullPointerException atorg.springframework.co......