基于springboot3基本使用knife4j-openapi3-jakarta-spring-boot-starter

1.创建springboot项目

1.1准备数据库数据

# 创建数据库
create database if not exists student;
use student;

create table student(
    id int auto_increment primary key ,
    name varchar(20) comment '姓名',
    account varchar(10) comment '账号',
    password varchar(20) comment '密码',
    phone varchar(11) comment '联系方式',
    age int comment '年龄',
    gender varchar(1) comment '性别',
    stu_class varchar(10) comment '班级',
    id_deleted int default 0 comment '是否删除'
)comment '学生信息表';

1.2创建maven项目并导入需要的坐标

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
    </parent>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <druid.version>1.2.1</druid.version>
        <mysql.version>8.0.32</mysql.version>
        <mybatisPlus.version>3.5.4</mybatisPlus.version>
        <knife4j.version>4.4.0</knife4j.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisPlus.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

    </dependencies>

1.3创建包和启动类

@SpringBootApplication
public class knife4jApplication {
    public static void main(String[] args) {
        SpringApplication.run(knife4jApplication.class,args);
    }
}

在这里插入图片描述

1.4编写配置文件,实体类

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/student
    username: root
    password: 311412
    type: com.alibaba.druid.pool.DruidDataSource

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true #开启驼峰命名与下滑线命名转换
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #查看日记
@Data
@Builder
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String account;
    @TableField("nick_name")
    private String nickName;
    private String name;
    private String password;
    private String phone;
    private String gender;
    private Integer age;
    @TableLogic
    @TableField("id_delete")
    private Integer idDelete;

}

1.5编写mapper接口使其继承baseMapper

@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}

1.6编写service层代码

编写service接口使其继承IService,编写service实现类使其实现service接口,继承ServiceImpl

public interface StudentService extends IService<Student> {
}


@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {
}

1.7编写统一返回结果代码和controller层代码

返回结果这里以json形式,code值里面0代表成功,1代表失败

{
  "code": 0,
  "data": [],
  "message": null
}
@Data
public class Result <T>{
    private Integer code; //0代表成功,1代表失败
    private T data;
    private String message;

    public static <T>  Result<T>   success(T data){
        Result<T> result = new Result<>();
        result.setCode(0);
        result.setData(data);
        return result;
    }
    public static <T>  Result<T>   success(){
        Result<T> result = new Result<>();
        result.setCode(0);
        return result;
    }
    public static <T> Result<T> error(String message){
        Result<T> result = new Result<>();
        result.setMessage(message);
        result.setCode(0);
        return result;
    }
}

controller层代码,采取REST风格进行开发
REST(Representational State Transfer)风格的开发是一种用于网络应用的架构风格,广泛用于构建灵活、可扩展的Web服务。RESTful服务通常使用HTTP协议的标准方法来执行增删改查(CRUD)操作:

创建(Create) - 使用POST方法
读取(Read) - 使用GET方法
更新(Update) - 使用PUT或PATCH方法
删除(Delete) - 使用DELETE方法
@RestController
@RequestMapping("/student")
@Slf4j
public class StudentController {
    @Autowired
    private StudentService studentService;

    @GetMapping("/findAll")
    public Result<List<Student>> findAll(){
        log.info("查询所有学生信息");
        List<Student> list = studentService.list();
        return Result.success(list);
    }
}

2.配置knife4j

前提要求:jdk>=17,springboot3

2.1引入坐标

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

2.2 编写配置文件

springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
    enabled: true
#  group-configs:
#    - group: "user"
#      paths-to-match: '/user/**'
#      packages-to-scan: 'com.nongda.controller'
#    - group: "manager"
#      paths-to-match: '/manager/**'
#      packages-to-scan: 'com.nongda.controller'
knife4j:
  enable: true
  setting:
    language: zh_cn
  basic:
    enable: true
    username: root
    password: 311412

2.3编写配置类

@Configuration
//@EnableKnife4j
public class Knife4jConfig {
    @Bean
    public OpenAPI openAPI(){
        return new OpenAPI()
                .info(new Info()
                        .title("knife4j测试的接口文档")
                        .description("这是基于knife4j-openapi3-jakarta-spring-boot-starter的接口文档")
                        .version("1.0")
                        .contact(new Contact()
                                .name("zbk")
                                .email("891276734@qq.com")))
                .externalDocs(new ExternalDocumentation()
                        .description("springboot基础框架")
                        .url("http://localhost:8080"));

    }
//    下面是分组

    @Bean
    public GroupedOpenApi groupedOpenApi2(){
        return GroupedOpenApi.builder()
                .group("学生管理")
                .pathsToMatch("/student/**")
                .build();
    }

}

3.knif4j配置详解

配置完成后运行项目,访问http://localhost:8080/doc.html

3.1配置文件详解

springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
    enabled: true
#  group-configs:
#    - group: "user"
#      paths-to-match: '/user/**'
#      packages-to-scan: 'com.nongda.controller'
#    - group: "manager"
#      paths-to-match: '/manager/**'
#      packages-to-scan: 'com.nongda.controller'
knife4j:
  enable: true
  setting:
    language: zh_cn
  basic:
    enable: true
    username: root
    password: 311412
  • springdoc.swagger-ui.path:设置Swagger UI界面的访问路径,如上面所示,则可以通过访问http://localhost:8080/swagger-ui.html,来查看和测试API文档
    在这里插入图片描述
  • tags-sorter和operations-sorter:这两个属性分别代表API标签和操作的排序方式alpha表示按字母顺序进行排序
  • api-docs.path:配置生成的OpenAPI3.0规范的JSON格式文档的访问路径。按上面配置意味着可以通过访问http://localhost:8080/v3/api-docs来查看生成的JSON文档。
  • api-docs.enabled:表示是否启用API文档的生成,true开启,false关闭
  • group-configs:创建API文档的多个分组,每个分组可以指定匹配的路径和扫描的java包。
  • group-configs.group:分组名称,
  • group-configs.paths-to-match:该分组的url
  • group-configs.packages-to-scan:该分组的控制器类所在的包
  • Knife4j配置部分
  • enable:表示启用Knife4j的增强功能,true开启,false关闭。在以前的版本中,开发者需要在配置文件中手动使用@EnableKnife4j来使用增强,自2.0.6版本后,只需要在配置文件中配置knife4j.enable=true即可不在使用注解,也就是说开启后不用在配置类使用@EnableKnife4j注解。
  • knife4j.setting.language:Ui默认显示语言,目前主要有两种:中文(zh-CN)、英文(en-US)。
  • knife4j.basic.enable:对Knife4j提供的资源提供BasicHttp校验,保护文档
  • knife4j.basic.username:账号
  • knife4j.basic.password:密码,设置完账号密码后意味着访问ui文档的时候需要输入账号和密码,在这里插入图片描述

3.2 配置类内容讲解

@Configuration
//@EnableKnife4j
public class Knife4jConfig {
    @Bean
    public OpenAPI openAPI(){
        return new OpenAPI()
                .info(new Info()
//                        设置标题
                        .title("knife4j测试的接口文档")
//                        设置简述
                        .description("这是基于knife4j-openapi3-jakarta-spring-boot-starter的接口文档")
//                        设置版本
                        .version("1.0")
//                        设置联系方式
                        .contact(new Contact()
                                .name("zbk")
                                .email("891276734@qq.com")))
                .externalDocs(new ExternalDocumentation()
                        .description("springboot基础框架")
                        .url("http://localhost:8080"));

    }
//    下面是分组

    @Bean
    public GroupedOpenApi groupedOpenApi2(){
        return GroupedOpenApi.builder()
//                设置分组名称
                .group("学生管理")
//                分组url
                .pathsToMatch("/student/**")
//                该分组所在的包
                .packagesToScan("com.nongda.controller")
                .build();
    }

}

3.3常用注解介绍

  • @Tag : 作用于控制类上,**name属性用于描述控制类,**如
    在这里插入图片描述效果:在这里插入图片描述
  • @Operation :作用于控制类的方法上面,用于描述方法
    @GetMapping("/findAll")
    @Operation(summary = "查询所有学生")
    public Result<List<Student>> findAll(){
        log.info("查询所有学生信息");
        List<Student> list = studentService.list();
        return Result.success(list);
    }

效果:
在这里插入图片描述

  • @Parameter(hidden = true) 、@Operation(hidden = true)@Hidden :这是用于排除或隐藏api;
  • @Schema:DTO实体DTO实体属性
    没有添加上面两个注解效果:
@Data
@Builder
@TableName(value = "student")
public class Student {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private String account;
    private String password;
    private String phone;
    private Integer age;
    private String gender;
    @TableField("stu_class")
    private String stuClass;
}

在这里插入图片描述设置注解后:

@Data
@Builder
@TableName(value = "student")
public class Student {
    @TableId(type = IdType.AUTO)
    @Hidden//设置在文档里面隐藏
    private Integer id;
    @Schema(name = "姓名")
    private String name;
    @Schema(name = "账号")
    private String account;
    @Schema(name = "密码")
    private String password;
    @Schema(name = "联系方式")
    private String phone;
    @Schema(name = "年龄")
    private Integer age;
    @Schema(name = "性别")
    private String gender;
    @TableField("stu_class")
    @Schema(name = "班级")
    private String stuClass;
}

在这里插入图片描述
@Parameters :对Controller 方法的参数进行参数描述
在这里插入图片描述

3.4使用mybatis-plus完成增删改查

@RestController
@RequestMapping("/student")
@Slf4j
@Tag(name = "学生管理模块")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @GetMapping("/findAll")
    @Operation(summary = "查询所有学生")
    public Result<List<Student>> findAll(){
        log.info("查询所有学生信息");
        List<Student> list = studentService.list();
        return Result.success(list);
    }
    @PostMapping
    @Operation(summary = "添加学生信息")
    public Result add(@RequestBody Student student){
        log.info(student.toString());
        boolean save = studentService.save(student);
        return save?Result.success():Result.error("添加失败");
    }
    @PutMapping("/update/{id}")
    @Operation(summary = "修改学生信息")
    public Result update(@RequestBody Student student,@PathVariable Integer id){
        log.info(student.toString());
        log.info("id是:{}",id);
        student.setId(id);
        boolean flag = studentService.updateById(student);
        return flag?Result.success():Result.error("修改失败");
    }
    @DeleteMapping("/{id}")
    @Operation(summary = "删除学生信息")
    public Result delete(@PathVariable Integer id){
        log.info("id是:{}",id);
        boolean flag = studentService.removeById(id);
        return flag?Result.success():Result.error("删除失败");
    }
}

ui效果:
在这里插入图片描述

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值