Swagger--基础--02--集成Springboot

2023-11-19

Swagger–基础–02–集成Springboot


代码位置

https://gitee.com/DanShenGuiZu/learnDemo/tree/master/swagger_learn

1、代码结构

在这里插入图片描述

2、代码

User

package fei.zhou.business.business;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;

@Data
@ToString
@ApiModel(value = "用户实体", description = "用户实体信息")//推荐的另一种方式
//@Schema(title = "用户实体", description = "用户实体信息")
public class User {
    @ApiModelProperty(value = "用户id", example = "1")  //推荐的另一种方式
    private String userId;

    @Schema(title = "用户名", example = "张三")
    private String userName;
}

UserController

package fei.zhou.business.business;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "人员信息接口")
@RestController
@RequestMapping("/userController")
public class UserController {

    @ApiOperation(value = "新增用户", notes = "新增用户方法,注意请求方式是post,且这里没有权限校验")
    @RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    //swagger :在方法位置定义响应参数
    @ApiResponses({
            @ApiResponse(responseCode = "401",description = "请进行身份验证"),
            @ApiResponse(responseCode = "403",description = "拒绝执行"),
            @ApiResponse(responseCode = "404",description = "资源未找到"),
            @ApiResponse(responseCode = "500",description = "系统异常")
    })
    //swagger :在参数位置定义请求参数
    public Integer add(@Parameter(name = "user", description = "用户实体参数", required = true) @RequestBody User user) {
        return 1;
    }

    @RequestMapping(value = "/update", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    @ApiOperation(value = "修改", notes = "修改用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId", value = "用户id", defaultValue = "1", required = true, paramType = "query"),
            @ApiImplicitParam(name = "userName", value = "用户名称", defaultValue = "1", required = true, paramType = "query")
    })
    //swagger :在方法位置定义请求参数
    public Integer update(@RequestParam("userId") String userId, @RequestParam("userId") String userName) {
        return 1;
    }

    @ApiOperation(value = "删除", notes = "删除用户")
    @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
    //swagger :在参数位置定义请求参数
    public Integer delete(@Parameter(name = "userId", description = "需要删除的用户id", required = true) @RequestParam("userId") String userId) {
        return 1;

    }

    @ApiOperation(value = "查询", notes = "查询用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId", value = "用户标识", required = true, paramType = "query", dataType = "String")
    })
    @RequestMapping(value = "/query", method = RequestMethod.GET)
    public String query(@RequestParam("userId") String userId) {
        return userId;
    }

}

SwaggerConfig

package fei.zhou.business.config;


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.ApiKey;
import springfox.documentation.service.Contact;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.Collections;

@Configuration
// 开启swagger
@EnableOpenApi
public class SwaggerConfig {
    /**
     * 创建API应用
     * 一个Docket就是一个分组定义,表示哪几个接口暴露给Swagger页面
     * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
     * @return
     */
    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.OAS_30) //指定使用 Swagger 3 版本的规范。
                //组名称
                .groupName("人员信息")
//                // 标签
//                .tags(new Tag("人员信息接口", "用户,角色,权限"))
                //增加API相关信息
                .apiInfo(apiInfo())
                //配置接口的认证方式
                .securitySchemes(Collections.singletonList(apiKey()))
                .select()
                // 指定扫描的包路径来定义指定要建立API的目录,到controller层即可。
                .apis(RequestHandlerSelectors.basePackage("fei.zhou.business.business"))
                // .apis(Predicates.and(Predicates.and(Predicates.or(
                // // 添加扫描包路径,此处支持多个包扫描
                // RequestHandlerSelectors.basePackage("com.example.demolearn.com.feizhou.business.business"),
                // // 扫描@Api 注解的类(推荐方式 )
                // RequestHandlerSelectors.withClassAnnotation(Api.class))))
                .paths(PathSelectors.any())//扫描所有路径的接口
                .build()
                //是否启用这个分组,为false表示该定义暂不生效。
                .enable(true);
    }

    //再定义一个Docket
    @Bean
    public Docket desertsApi2() {
        return new Docket(DocumentationType.OAS_30)
                .groupName("流程信息")
                //API的基本信息
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("fei.zhou.business.business"))
                .paths(PathSelectors.any())
                .build()

                .enable(true);
    }

    /**
     * 创建该API的基本信息,包括标题、描述、版本等(这些基本信息会展现在文档页面中)
     * 访问地址:http://ip:port/swagger-ui.html
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //标题
                .title("XX项目--Swagger3.0")
                //Api文档描述
                .description("这个openAPI的界面,前端可以通过这个去调试接口,后端人员写的内容要详细,保证前端能理解,减少沟通")
                //配置联系方式(姓名,url,邮箱)
                .contact(new Contact("周飞", "https://gitee.com/DanShenGuiZu/learnDemo/tree/master/swagger_learn", "920786312@qq.com"))
                //服务器地址
                .termsOfServiceUrl("https://gitee.com/DanShenGuiZu/learnDemo/tree/master/swagger_learn")
                //版本信息
                .version("1.0")
                .build();
    }
    /**
     *
     *  用于配置接口的认证方式。
     *  在这里,我们使用 API Key 的方式进行认证,
     * @param
     * @return springfox.documentation.service.SecurityScheme
     * @author  <a href="920786312@qq.com">周飞</a>
     * @since 2023/8/9 15:13
     */
    private SecurityScheme apiKey() {
        //设置 认证头名称:Authorization
        return new ApiKey("Authorization", "Bearer ", "header");
    }
}

application.yml

server:
  port: 8787



spring:
  # 解决 Spring Boot 2.6.x 和 Swagger 3.0.0 版本兼容问题
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.10</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<!-- swagger 3.0 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

3、测试

http://localhost:8787/swagger-ui/index.html

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swagger--基础--02--集成Springboot 的相关文章

  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • Kafka - 如何同时使用过滤器和过滤器?

    我有一个 Kafka 流 它从一个主题获取数据 并且需要将该信息过滤到两个不同的主题 KStream
  • 如何以编程方式使用包含多列的 where-in 子句执行 PostgreSQL 查询?

    我的查询是这样的 select from plat customs complex where code t code s in 01013090 10 01029010 90 它在 psql 控制台中运行良好 我的问题是如何在客户端代码中
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve

随机推荐

  • 性能测试大致分为以下六种

    性能测试大致分为以下六种 第一种是Benchmark 标杆测试 又叫基准测试 主要是测试一些基础数据 给进一步建立性能模型提供依据 一般测试人员按照1并发用户来执行脚本 校验脚本正确与否 为之后的压力测试和负载测试做准备 第二种是Load
  • 传奇修改数据库后服务器异常,DBserver提示物品数据库加载错误的解决方法

    DBserver exe程序是传奇服务端 什么是传奇服务端 中负责人物数据库处理的重要程序 也是我们运行服务端时第一个启动的程序 但由于现在的数据库名不统一还有服务端路径的不同 经常在运行时提示 Exception 物品数据库加载错误 在我
  • centos7 RTNETLINK answers: File exists 解决办法

    首先说一下本人遇到的问题 我是通过克隆虚拟机安装的服务器 已将 etc sysconfig network scripts ifcfg eno16777736 的UUID这一行删除 因为每张网卡的mac地址是不一样的 所以UUID也是不一样
  • 全卷积神经网络( FCN ):语义分割深度模型先驱

    语义分割 简单地说 分割就是抠图 语义分割 是像素级别地给物体分类 现在ps已经集成了很多自动分割的功能 摄像头采集到车前景象 通过模型分析 我们可以自动筛选出地面 交通线 人行道 行人 建筑 树 以及其他基础设施 在上图 我们可以看到地面
  • MyBatis 的基本使用、增删改查(一)

    1 ORM Mybatis ORM 对象关系映射 这个通俗点讲其实就是数据库的表和实体类相互映射的关系 这个了解一下就行 不重要 Mybatis 基于java的持久层框架 2 Mybatis 的入门使用 这边没有集成spring sprin
  • Qt 集成Web 的内容

    文章目录 Qt 集成Web 的内容 Qt 中的WebEngine Qt和HTML JavaScript混合应用程序 Qt WebEngine 概述 Qt WebEngine 架构 Qt WebEngine Widgets 模块 Qt Web
  • python远程文件管理系统_python 读取远程服务器文件

    几个提高工作效率的Python内置小工具 在这篇文章里 我们将会介绍4个Python解释器自身提供的小工具 这些小工具在笔者的日常工作中经常用到 减少了各种时间的浪费 然而 却很容易被大家忽略 每当有新来的同事看到我这么使用时 都忍不住感叹
  • openvino+yolov5的检测优化及其在考勤机上的应用

    openvino yolov5的检测优化及其在考勤机上的应用 1 简介 2 安装yolov5 3 配置Pytorch环境 1 在开始界面中打开Anaconda Prompt 2 输入命令 4 配置到Pycharm 1 打开Pycharm 2
  • 多维时序

    多维时序 MATLAB实现GA GRU遗传算法优化门控循环单元多变量时间序列预测 目录 多维时序 MATLAB实现GA GRU遗传算法优化门控循环单元多变量时间序列预测 效果一览 基本介绍 程序设计 参考资料 效果一览 基本介绍 多维时序
  • ubuntu16.04踩坑笔记--ubuntu循环登录问题

    感觉自己有毒 在没有预兆的情况下 ubuntu登录界面循环登录 无法进入桌面 具体表现为登录密码输入后 黑屏一下继续回到登录界面 然后循环 在网上找到很多方法 比如 1 检查 Xauthority属于我的所有权 而不是root 包括删掉和权
  • failed to execute goal org.apache.maven.plugins:maven-archetype-plugin错误解决方法

    使用maven创建project时碰到如下错误 D codes JSF gt mvn archetype create DgroupId com tutorialspoint test DartifactId helloworld Darc
  • 把openssh升级到8.1版本

    把openssh升级到8 1版本各种坑都能解决无敌 下载相应的软件包 yum install wget gcc y yum group install Development Tools y yum install y zlib devel
  • 删除链表的倒数第n个节点

    题目 Given a linked list remove the n th node from the end of list and return its head For example Given linked list 1 gt
  • 形象易懂讲解算法II——压缩感知

    形象易懂讲解算法II 压缩感知
  • Qt5.12.2交叉编译并移植程序到ARM过程记录

    交叉编译 在系统A中编译出在要系统B中运行的环境 程序 编译工具 x9 gcc linaro 5 5 0 2017 10 x86 64 arm linux gnueabihf 1 将编译工具拷贝到 opt 文件夹 2 下载Qt源代码 解压
  • 【云原生】Docker 详解(三):Docker 镜像管理基础

    Docker 详解 三 Docker 镜像管理基础 1 镜像的概念 镜像可以理解为应用程序的集装箱 而 Docker 用来装卸集装箱 Docker 镜像含有启动容器所需要的文件系统及其内容 因此 其用于创建并启动容器 Docker 镜像采用
  • 数据结构算法—邻接表存储的无向图求连通分量个数

    数据结构算法 邻接表存储的无向图求连通分量个数 邻接表存储结构 typedef struct ArcNode int adjvex 边指向的顶点 struct ArcNode nextarc 下一条边的指针 ArcNode typedef
  • 感谢我的python老师

    Python自动化开发 金角大王版 http www cnblogs com alex3714 articles 5885096 html 转载于 https www cnblogs com tianqizhi p 8385650 html
  • canvas 流程图bug

    问题一 在当前年份点击选择没有取消调选择在去选择年份是会出bug 修改 canvas 添加点击事件后状态恢复到初始值 修改完 效果图
  • Swagger--基础--02--集成Springboot

    Swagger 基础 02 集成Springboot 代码位置 https gitee com DanShenGuiZu learnDemo tree master swagger learn 1 代码结构 2 代码 User packag