SpringBoot整合Swagger3
1、导入相关依赖
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!--swagger-ui-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2、编写配置类
package com.ly.laboratory.config;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Value;
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.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* @author ly (个人博客:https://www.cnblogs.com/ybbit)
* @date 2023-10-15 15:58
* @tags 喜欢就去努力的争取
*/
@Configuration
@EnableOpenApi// Swagger 开启生成接口文档功能
public class Swagger3Config {
/**
* application中还配置了mvc,因为springboot与swagger3不兼容
*/
/**
* ture 启用Swagger3.0, false 禁用(生产环境要禁用)
*/
// 是否开启swagger,正式环境一般是需要关闭的,可根据springboot的多环境配置进行设置
@Value("${knife4j.enable}")
private Boolean swaggerEnabled;
@Bean
public Docket webApiConfig() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(webApiInfo())
// 是否开启
.enable(swaggerEnabled)
.groupName("webApi")
.select()
// 扫描的路径使用@Api的controller
.apis(RequestHandlerSelectors.withMethodAnnotation(Operation.class))
// 指定路径处理 PathSelectors.any()代表所有的路径
//.paths(PathSelectors.any())
// 只显示api路径下的页面
.paths(PathSelectors.regex("/api/.*"))
.build();
}
@Bean
public Docket adminApiConfig() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(adminApiInfo())
// 是否开启
.enable(swaggerEnabled)
.groupName("adminApi")
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(Operation.class))
// 只显示admin路径下的页面
.paths(PathSelectors.regex("/admin/.*"))
.build();
}
private ApiInfo webApiInfo() {
return new ApiInfoBuilder()
.title("网站门户-API文档")
.description("本文档描述了网站门户接口定义")
.version("1.0")
.contact(new Contact("ly", "https://www.cnblogs.com/ybbit", "startybbit@163.com"))
.build();
}
private ApiInfo adminApiInfo() {
return new ApiInfoBuilder()
.title("后台管理-API文档")
.description("本文档描述了后台管理系统接口定义")
.version("1.0")
.contact(new Contact("ly", "https://www.cnblogs.com/ybbit", "startybbit@163.com"))
.build();
}
}

3、使用
package com.qbb.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qbb.common.R;
import com.qbb.entity.User;
import com.qbb.entity.vo.UserVo;
import com.qbb.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @author ly (个人博客:https://www.cnblogs.com/ybbit)
* @date 2022-10-25 20:52
* @tags 我爱的人在很远的地方, 我必须更加努力
*/
//@Api(tags = "用户管理")
@Tag(name = "用户管理")
@RestController
@RequestMapping("/admin/user")
@CrossOrigin
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
//@ApiOperation(value = "用户列表", notes = "用户列表")
@Operation(summary = "用户列表")
@GetMapping("/list/{pageNo}/{pageSize}")
public R page(
/*@ApiParam(value = "当前页", defaultValue = "1")*/
@Parameter(name = "pageNo", description = "当前页")
@PathVariable(value = "pageNo", required = false) Integer pageNo,
/*@ApiParam(value = "每页记录数", defaultValue = "10")*/
@Parameter(name = "pageSize", description = "每页记录数")
@PathVariable(value = "pageSize", required = false) Integer pageSize,
/*@ApiParam(value = "searchObj查询条件")*/
@Parameter(name = "userVo", description = "searchObj查询条件")
UserVo userVo) {
Page<User> page = new Page<>(pageNo, pageSize);
return R.ok().data(userService.pageList(page, userVo));
}
@Operation(summary = "保存用户")
@PostMapping("/save")
public R save(@Parameter(name = "user", description = "用户对象") @Valid @RequestBody User user) {
boolean flag = userService.save(user);
if (flag) {
return R.ok();
}
return R.error().message("保存失败!");
}
}
4、注意:启动项目会报错 ===> java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null
解决办法:在配置文件中加入以下配置即可
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
5、访问:http://localhost:你的port/doc.html

SpringBoot整合Swagger3的更多相关文章
- SpringBoot整合Swagger3生成接口文档
前后端分离的项目,接口文档的存在十分重要.与手动编写接口文档不同,swagger是一个自动生成接口文档的工具,在需求不断变更的环境下,手动编写文档的效率实在太低.与swagger2相比新版的swagg ...
- SpringBoot整合Mail发送邮件&发送模板邮件
整合mail发送邮件,其实就是通过代码来操作发送邮件的步骤,编辑收件人.邮件内容.邮件附件等等.通过邮件可以拓展出短信验证码.消息通知等业务. 一.pom文件引入依赖 <dependency&g ...
- SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂)
SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂) 一,整合Swagger3.0 随着Spring Boot.Spring Cloud等微服务的 ...
- spring-boot整合mybatis(1)
sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...
- SpringBoot整合Mybatis之项目结构、数据源
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
- springboot整合mq接收消息队列
继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...
- springboot整合mybaits注解开发
springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...
- SpringBoot整合Redis、ApachSolr和SpringSession
SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- SpringBoot整合Kafka和Storm
前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...
随机推荐
- 代替forever下一个部署node的持久化工具---pm2
最近有个后端项目,用的是node,在持久化的时候会挂掉,详细了解到用的是nohup,然后先详细了解了一下nohup nohup是一个Linux命令,用于在系统后台不挂断地运行命令,退出终端不会影响程序 ...
- Api接口如何防止被刷?
当今,越来越多的应用程序和服务都提供了API接口,使得开发人员可以方便地与这些应用程序和服务进行交互.但是,由于API接口是公开的,因此很容易被黑客利用,对系统造成损害.为了确保API接口的安全性 ...
- from itertools import groupby
需求:期望由 a 得到 b 实现方法: from itertools import groupby a = [ {'name': 'a', 'value': 1}, {'name': 'b', 'va ...
- ARM开发板学习
ARM开发板学习 1.蜂鸣器配饰和时间函数开发 #include <stdio.h> #include <wiringPi.h> #include <unistd.h&g ...
- Python基础——变量、常量、数字类型、四 列表list、五 字典dict、六 布尔bool、垃圾回收机制、用户交互、运算符、流程控制
文章目录 变量 一 引入 一.什么是变量? 二.为什么要有变量? 三.怎么使用变量(先定义.后使用) 3.1.变量的定义与使用 3.2.变量名的命名规范 3.3.变量名的命名风格 3.4.变量值的三大 ...
- PostgreSQL学习笔记-1.基础知识:创建、删除数据库和表格
PostgreSQL 创建数据库 PostgreSQL 创建数据库可以用以下三种方式:1.使用 CREATE DATABASE SQL 语句来创建.2.使用 createdb 命令来创建.3.使用 p ...
- OSPF常用配置和常用的查看命令
转载请注明出处: 1.启动OSPF进程,进入OSPF视图. [Huawei] ospf [ process-id | Router ID Router ID ] 路由器支持OSPF多进程,进程号是本地 ...
- MySQL误删恢复方法2
实际工作中总会发生数据误删除的场景,在没有备份情况下,如何快速恢复误删数据就显得非常重要. 本文基于MySQL的binlog日志机制,当日志格式设置为"binlog_format=ROW&q ...
- HDU4841 AHOI1999 圆桌问题 题解
朴素的约瑟夫问题,用vector处理即可 #include <iostream> #include <vector> using namespace std; //AHOI19 ...
- kubeadm 工具部署 kubernetes v1.16.2
环境准备 3个节点,以下基于 Centos 7.6 系统, 内核版本:3.10.0-957.12.2.e17.x86_64 HOST NODE CPU MEM 192.168.1.111 master ...