SpringBoot整合Swagger2

news2025/1/11 22:38:38

整合Swagger2

1.Swagger介绍

前后端分离开发模式中,api文档是最好的沟通方式。

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

1、及时性 (接口变更后,能够及时准确地通知相关前后端开发人员)

2、规范性 (并且保证接口的规范性,如接口的地址,请求方式,参数及响应格式和错误信息)

3、一致性 (接口信息一致,不会出现因开发人员拿到的文档版本不一致,而出现分歧)

4、可测性 (直接在接口文档上进行测试,以方便理解业务)

2.集成knife4j

文档地址:https://doc.xiaominfo.com/

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。

knife4j属于service模块公共资源,因此我们集成到service-uitl模块

3.添加依赖

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

4.添加knife4j配置类

package com.yurui.manage_system_springboot.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author YurUi
 * @Version 1.0
 */
/**
 * knife4j配置信息
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {

    @Bean
    public Docket adminApiConfig(){
        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("token")
                .description("用户token")
                .defaultValue("")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(tokenPar.build());
        //添加head参数end

        Docket adminApi = new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi")
                .apiInfo(adminApiInfo())
                .select()
                //只显示admin路径下的页面
                .apis(RequestHandlerSelectors.basePackage("com.yurui.manage_system_springboot"))
                .paths(PathSelectors.regex("/admin/.*"))
                .build()
                .globalOperationParameters(pars);
        return adminApi;
    }

    private ApiInfo adminApiInfo(){

        return new ApiInfoBuilder()
                .title("后台管理系统-API文档")
                .description("本文档描述了后台管理系统微服务接口定义")
                .version("1.0")
                .contact(new Contact("yurui", "http://yurui.com", "1584841572@qq.com"))
                .build();
    }

}

5.控制器方法

添加相关的注解

package com.yurui.manage_system_springboot.controller;

import com.yurui.manage_system_springboot.pojo.User;
import com.yurui.manage_system_springboot.service.UserService;
import com.yurui.manage_system_springboot.utils.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @Author YurUi
 * @Version 1.0
 */
@RestController
@RequestMapping("/admin/system")
@Api(tags = "系统接口")
public class SystemController {

    @Autowired
    private UserService userService;

    @RequestMapping("/user")
    @ApiOperation("查看所有user信息")
    public JsonResult login(){

        List<User> list = userService.getAllUser();

        return JsonResult.ok(list);
    }
}

常用的注解:
@Api(tags = "系统接口"):作用在类上,标注该类的作用

@ApiOperation("查看所有user信息"):作用在方法,标注该方法的作用

@ApiParam():作用在形参的位置,说明参数

6.测试

http://localhost/doc.html#/home

注意是:一定要与项目部署的端口一致

在这里插入图片描述

7.可能出现的BUG

当我们按照上述的步骤整合knife4j后启动项目时,发现报以下错误原因是:空指针异常

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

解决方案:
第一种:如果你使用的SpringBoot的版本是2.6.x以上版本,需要将版本降到为2.5.x版本

第二种:如果不想修改SpringBoot的版本,需要在SpringBoot的启动类中添加一个注解@EnableWebMvc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes云原生实战00 何为云原生?

大家好&#xff0c;我是飘渺。 从今天开始我将开启第二个专栏系列&#xff0c;即 Kubernetes云原生实战 何为云原生 都2022年了&#xff0c;我相信各位肯定听过 云原生 这个词&#xff0c;但是究竟什么是云原生&#xff0c;却很少有人能真正说清楚。 如果找资料来看&#x…

广通远驰亮相2022 C-V2X“四跨”(苏州)应用示范活动

2022年11月3-4日&#xff0c;2022 C-V2X“四跨”&#xff08;苏州&#xff09;先导应用示范活动在苏州举办&#xff0c;9家国内外整车企业、22家终端企业、9家芯片模组企业、7家信息安全企业共计23个车队、47家单位参与活动演示。 深圳市广通远驰科技有限公司&#xff08;以下简…

请求转发与重定向到底有哪些区别?

一. 前言 我们知道&#xff0c;Web开发中的页面跳转&#xff0c;通常有两种跳转方式&#xff1a;重定向与请求转发。但可能有很多同学并不知道这两种跳转在细节上的区别&#xff0c;只知道都能跳转到目标页面。但实际上这两种跳转方式深入研究后&#xff0c;你会发现有很多不同…

SAML2.0 笔记(二)

文章目录一、前言二、共通内容1.1、引入依赖1.2、初始化SAML部分1.2.1、检查JCE环境1.2.2、初始化服务1.3、拦截器部分1.3.1、构建AuthnRequest1.3.2、AuthRequest解析1.3.3、SP模式选择1.3.4、IDP模式选择1.4、涉及的工具类1.4.1、OpenSAMLUtils工具类1.4.2、sp/idp Credentia…

Life-long Mapping

0.引言 主要参考自某某学院的激光slam课程。 1.Lifelong Mapping 的概念和应用 在长时间的建图过程中&#xff0c;基于图优化的 SLAM 的方法存在以下问题&#xff1a;PoseGraph 中的节点随着机器人走过的距离越来越多&#xff0c;以至于求解规模不断增大&#xff0c;影响优化…

密码学系列之九:密钥管理

密钥管理1. 密钥管理概述1.1 密钥管理的主要内容1.2 密钥管理的原则1.3 密钥管理的层次结构2. 密钥的生命周期3. 密钥分发3.1 无中心的密钥分发3.2 有中心的密钥分发4. 密钥协商技术4.1 Diffie-Hellman密钥交换协议4.2 端-端协议5. 密钥托管5.1 密钥托管密码体制基本组成5.2 托…

社区便利店销售微信APP的设计与实现(源码+论文)_kaic

目 录 1 绪论 1.1 研究背景、研究目的和研究意义 1.1.1 研究背景 1.1.2 研究目的与研究意义 1.2 国内外研究现状 2 系统开发环境 2.1 系统功能分析 2.2 系统开发平台 2.3 平台开发相关技术 2.3.1 B/S结构 2.3.2 Java技术介绍 2.3.3 Mysql数据库 2.3.4 SSM框架 2.4 微信开发者工…

Nginx模块开发之http过滤器filter

Nginx http过滤器filter模块开发一、过滤器模块简介二、Nginx相关数据结构介绍2.1、ngx_module的数据结构2.2、ngx_http_module数据结构2.3、ngx_command数据结构三、Nginx过滤器模块开发3.1、Nginx模块开发流程3.2、Nginx 模块执行3.3、示例代码3.4、编写config文件3.5、编译模…

免费嵌入 NFT 数据到任何网站或平台

Nov. 2022, Vincy Data Source: Footprint Analytics - Bingo NFT Widget Footprint Analytics 是一个用于发掘和可视化整个区块链数据的工具&#xff0c;专注于解析 NFT 和 GameFi 等数据。它使用户能够拖放界面以及使用 SQL 或 Python 建立图表和仪表盘&#xff0c;而无需编…

【附源码】计算机毕业设计JAVA学生选拔系统

【附源码】计算机毕业设计JAVA学生选拔系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

基于Android的地图服务系统设计与实现

目 录 摘 要 I Abstract II 1绪论 1 1.1 背景及意义 1 1.2 主要方法和研究进展 1 1.3主要内容 1 1.4本论文的结构安排 1 2系统概述 2 2.1开发环境搭建 2 2.1.1 安装JDK 2 2.1.2 安装Eclipse集成开发环境 2 2.1.3 下载安装Android SDK 2 2.1.4 为Eclipse安装ADT插件 3 2.1.5 创建…

2022年最受欢迎的指纹浏览器,你知道几个?

浏览器是我们在电脑上最常使用的软件&#xff0c;以至于我们几乎忽略了它。对于用户来说&#xff0c;如果使用习惯了很难从一种浏览器切换到另一种浏览器。而指纹浏览器对于跨境人来说也是最常使用的软件工具&#xff0c;毕竟它就是为了跨境人打造的一款浏览器。那2022年这几个…

关于typescript中的extends和infer以及用法

extends extend的意思如果不是用在类的扩展中那么就表示约束在。 type Pick<T, K extends keyof T> {[P in K]: T[P]; };比如下面这个例子&#xff1a; 在Picks中K应该约束在keyof T这个类型中。 infer infer表示占位符 逆变和协变 协变&#xff1a;子类型赋给父…

云原生安全系列2:关于镜像安全必须知道的事儿

1.避免特权容器 Docker 提供了一种特权模式&#xff0c;它允许容器在本地计算机上以 root 身份运行。在特权模式下运行容器提供了该主机的功能&#xff0c;包括&#xff1a; 对所有设备的根访问权限能够篡改 AppArmor 和 SELinux 等 Linux 安全模块能够使用主机的内核功能安装…

pytorch神经网络基本骨架nn.module的使用

1.Containers 首先查看官方文档中nn.module骨架&#xff0c;其中有六个模块。 1.1Module import torch.nn as nn import torch.nn.functional as F class Module(nn.Module):def __init__(self):super(Module, self).__init__()self.conv1nn.Conv2d(1, 20, 5)self.conv2nn.C…

ESP32学习笔记 - 基于 ESP32 移植 LVGL8.3

以前写过一篇文章,讲述了如何基于ESP32 芯片移植LVGL这个GUI框架,当时是在LVGL移植好的工程lv_port_esp32上进行的,这个工程最新支持到LVGL7.9版本,关于之前的移植文章,可以参考以下链接: ESP32学习笔记 - 移植LVGL 随着LVGL不断在高频率地迭代大版本,LVGL8.x已经比以…

java基于springboot+vue的酒店预订网站——计算机毕业设计

运行环境&#xff1a; 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架springbootvue 项目介绍 民宿管理平台系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商家管理、民宿信息管理、房间类型管理、房间信息管理、…

基于Springboot+Mybatis+mysql+vue技术交流博客论坛系统

基于SpringbootMybatismysqlvue技术交流博客论坛系统一、系统介绍二、功能展示1.主页(普通用户)2.登陆、注册&#xff08;普通用户&#xff09;3.博客(普通用户)4.文章详情&#xff08;点赞、评论&#xff09;&#xff08;普通用户&#xff09;5.我的文章&#xff08;普通用户&…

模拟电子技术(六)信号的运算与处理

&#xff08;六&#xff09;信号的运算与处理基本运算电路概述比例运算电路反向比例运算电路同相比例运算电路电压跟随器加减运算电路求和运算电路加减运算电路积分运算电路微分运算电路基本微分运算电路逆函数型微分运算电路对数运算电路采用二极管的对数运算电路利用晶体管的…

配置中心微服务(Spring Cloud Config)

为什么需要配置服务中心&#xff1f; 1、统一维护2、配置内容安全与权限微服务之config server 注册到注册中心启动类加注解&#xff1a;EnableConfigServerSpringCloudApplicationEnableDiscoveryClient/{name}-{profiles}.yml <>name 微服务名称 profiles…