自学springboot之整合swagger

SpringBoot集成Swagger SpringBoot集成Swagger 1、Swagger简介 前后端分离 前端 : 前端控制器、视图层 后端 : 后端控制器、服务层、数据访问层 前后端通过API进行交互 前后端相对独立且松耦合 前后端甚至可以部署在不同的服务器上 产生一个问题: 前后端集成联调,前端人员和后端人员无法做到,“及时协商,尽早解决”,最终导致问题集中爆发 解决问题 首先制定schema[计划的提纲],实时更新最新API,降低集成的风险; 前后端分离: 前端测试后端接口:postman (早些年) 后端提供接口, 阅读详情

springboot + Swagger

学习目标:

  • 了解Swagger的作用和概念
  • 了解前后端分离
  • 在SpringBoot中集成Swagger

swagger简介

现在开发,很多采用前后端分离的模式,前端只负责调用接口,进行渲染,前端和后端的唯一联系,变成了API接口。因此,API文档变得越来越重要。swagger是一个方便我们更好的编写API文档的框架,而且swagger可以模拟http请求调用。

大部分采取的方式:Vue + SpringBoot,Vue通过js渲染页面,后端把数据传递给js,早期前端只负责写页面,然后把写好的HTML页面给后端,后端使用模板引擎(Jsp,Thymeleaf、 freemarker)进行开发。

前后端分离的好处:各自开发,相对独立,松耦合,前后端通过API进行交互,后端提供接口给前端,前端去调用该接口,但可能会导致前后端团队人员不能做到及时协商,出现一些问题。解决方式:早期使用实时更新文档,但非常繁琐,后来又使用postman来进行一些测试。

使用:

  1. 新建一个springboot+web项目

  2. 导入依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.0.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.ryan</groupId>
        <artifactId>springboot-08-swagger</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot-08-swagger</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>11</java.version>
        </properties>
    
        <dependencies>
            <!--springfox-swagger2 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <!--springfox-swagger-ui -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
  3. 测试环境:略

  4. 编写Swagger配置类

    package com.ryan.swagger.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.env.Environment;
    import springfox.documentation.RequestHandler;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    import java.util.ArrayList;
    
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        //swagger有自己的bean实例——Docket
        //配置了swagger
        @Bean
        public Docket docket(){
            //假设这里有一个业务,我只希望在生产环境中使用swagger,其他环境不需要
            //第一步,配置多个环境,第二步:传一个环境参数(Environment),
            //第三步:获取当前环境(environment.acceptsProfiles(profiles)),第四步:判断环境,第五步,传到enable方法中即可
            //这里就不多测试了
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    //自定义组名(团队开发中的一组),如果有多个组,就是多个Docket,一个组对应一个Docket
                    .groupName("ryan")
                    .enable(true)//是否开启swagger,如果为false,则swagger不能在浏览器中被访问
                    //测试题,
                    .select()
                    //配置指定需要扫描的包,除了basePackage还有其他的可以点出来看,例如any none...
                    .apis(RequestHandlerSelectors.basePackage("com.ryan.swagger.controller"))
                    //.paths(PathSelectors.any())//此方法为过滤方法
                    .build();
        }
    
        public ApiInfo apiInfo(){
    
            Contact contact = new Contact("ryan", "https://blog.youkuaiyun.com/codebeef", "635726567@qq.com");
    
            return new ApiInfo(
                    "ryan的SwaggerApi文档",
                    "努力努力再努力",
                    "v1.0",
                    "https://blog.youkuaiyun.com/codebeef",
                    contact,
                    "Apache 2.0",
                    "http://www.apache.org/licenses/LICENSE-2.0",
                    new ArrayList()
            );
        }
    }
    

    效果:
    在这里插入图片描述
    编写实体类

package com.ryan.swagger.pojo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户名")
    private String username;
    @ApiModelProperty("密码")
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    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;
    }
}

效果:通过注解给实体类添加api
在这里插入图片描述
编写controller

package com.ryan.swagger.controller;

import com.ryan.swagger.pojo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Api(description = "用户管理API")
@RestController
public class HelloController {

    @ApiOperation("添加用户")
    @PostMapping("/add")
    public User add(@ApiParam("用户名") String username, @ApiParam("密码") String password){
        return new User();
    }

    @ApiOperation("修改用户")
    @PostMapping("/update")
    public String update(@ApiParam("用户名") String username, @ApiParam("密码") String password){
        return "修改完成";
    }

    @ApiOperation("删除用户")
    @GetMapping("/delete")
    public String delete(@ApiParam("用户编号") Integer id){
        return "已删除";
    }

    @ApiOperation("查询用户")
    @RequestMapping("/query")
    public User query(){
        User user = new User();
        user.setUsername("ryan");
        user.setPassword("ryan123");
        return new User();
    }
}

效果:通过注解添加api,注意RequestMapping会把所有方式都显示出来
在这里插入图片描述
还可以在上面进行测试
在这里插入图片描述
注解总结:

swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息

@Api:修饰整个类,描述Controller的作用

@ApiOperation:描述一个类的一个方法,或者说一个接口

@ApiModel:用对象来接收参数 ,修饰类

@ApiModelProperty:用对象接收参数时,描述对象的一个字段

@ApiResponse:HTTP响应其中1个描述

@ApiResponses:HTTP响应整体描述,一般描述错误的响应

@ApiIgnore:使用该注解忽略这个API

@ApiError :发生错误返回的信息

@ApiParam:单个参数描述

@ApiImplicitParam:一个请求参数,用在方法上

@ApiImplicitParams:多个请求参数

总要的两个依赖

<!--springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!--springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

优点总结:

  • 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
  • 接口文档实时更新
  • 可以在线测试

Swagger是一个优秀的工具,几乎所有大公司都有使用他

注意:在正事发布的时候,关闭Swagger,这是出于安全考虑,同时可以减小内存

学习来源:B站up主狂神说,感觉不错,感兴趣的可以去看下

Swagger工具的作用及使用方法 Swagger和Postman都是常用的API开发和测试工具,Swagger使开发人员在设计和开发API时,能够更好地进行接口文档的编写、展示和管理,以及提供在线接口测试的能力 阅读详情

相关推荐

Swagger Ui使用介绍(建议收藏)

swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。作用:1.接口文档自动在线生成。2.功能测试。Swagger是一组开源项目,其中主要项目如下:1.Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger1.2文档转换成Swagger2.0文档等功能。

m0_58620483的博客 3172

swagger接口文档工具

(1)导入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</gro

u013029883的博客 589

【SpringBoot整合系列】SpringBoot3.x整合Swagger

SpringBoot整合系列:SpirngBoot整3合swagger

低调做人,低调编码,神码都是浮云 1万+

swagger详细用法

超级详细swagger使用教程

Hanson的博客 1万+

springboot + spring security + swagger 整合

springboot整合 spring security 和swagger-ui : pom.xml文件中添加相关依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> .

不要总是等明天再开始 9436

Springboot整合Swagger

Springboot整合Swagger 引言 1.传统模式我们大家之前在做项目开发的时候可能会很少接触前后端分离的项目,基本上就是前端工程师编写HTML,完成页面设计,然后在使用模板技术将写好的前端代码转化为脚本,同时也会内嵌一些后端提供的模板变量以及逻辑操作之后将代码全部打包和后端代码一起放到服务器上。 或者说更简单的方法就是先写后端逻辑代码,之后通过我们的thymeleaf模板引擎对HTML视...

Thinkao 的博客 4992

SpringBoot整合Swagger

SpringBoot整合Swagger

YIYIYI 1898

springboot2与swagger2整合

传统的做法,我们应该会为每个系统准备一份接口文档,方便各个团队之间的交流。但是在微服务快速发展的今天,各个系统之间的交流基本都依赖于接口调用,这样就导致接口变得越来越多,开发人员在开发的同时还要维护文档,任务量加重,哀声一片,也可能会出现开发人员未及时维护文档,使得文档与接口信息不一致。 传统做法,在如今是一个不太友好的方式,为了解决上述问题,Swagger出现了。Swagger是一款可以通过注...

二月初二 6964

springboot整合swagger2

Spring Boot 整合 Swagger2 的作用主要体现在以下几个方面:自动生成接口文档:Swagger2 能够根据 Spring Boot 项目中的代码自动生成 RESTful API 文档,减少了手动编写和维护 API 文档的工作量。提高开发效率:通过自动生成的文档,开发人员可以快速了解和测试各个 API 接口的功能和参数,提高了开发效率。减少沟通成本:在前后端分离的开发模式中,Swagger2 提供的在线文档可以减少前后端的沟通成本,帮助新加入项目的同事快速上手业务。

2403_87916407的博客 1705

springboot+mybatis+resteasy+swagger整合

http://blog.youkuaiyun.com/dfsdffe/article/details/52101691前言由于在公司实习,自学了Springboot,mybatis,resteasy,swagger等内容,并做了相关整合,网上相关内容较少,故在此记录并分享一下。由于本人学习程度有限,如有错误,请多包涵并指正,谢谢。逐步整合1.springbootSpring Boot提供了一个强大的一键式Spr

dfsdffe的博客 5608

MT6816磁编码器在无人机电调中的实战应用:从选型到调试全记录

本文详细介绍了MT6816磁编码器在无人机电调系统中的实战应用,涵盖选型、硬件集成、软件配置到飞行测试的全流程。通过对比霍尔传感器和光电编码器,突出MT6816在角度分辨率、安装公差和抗振动能力等方面的优势,为无人机动力系统提供高精度控制解决方案。

pandas7gardener的博客 234

springboot整合swagger的3步骤

springboot整合swagger 添加swagger依赖 <!--整合swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifa...

qq_42895864的博客 4528

AMD 3D V-Cache技术解析:CPU缓存堆叠如何突破性能瓶颈

在半导体领域,缓存(Cache)是提升处理器性能的关键技术,其核心原理是在高速CPU核心与慢速主存之间建立数据中转站,以缓解“内存墙”问题。随着摩尔定律放缓,传统平面扩展缓存面临面积成本高、延迟增加等挑战。3D封装技术应运而生,通过垂直堆叠实现极致的互联密度与带宽,成为突破性能瓶颈的重要工程路径。这项技术的价值在于能以更优的功耗和延迟,显著提升缓存容量,从而改善游戏、科学计算等数据密集型应用的性能。以AMD 3D V-Cache为代表的Hybrid Bonding(混合键合)工艺,正是这一趋势的典型实践,它

weixin_30432579的博客 418

springboot整合swagger

springboot 整合swagger 在开始之前先说一下自己的理解。我觉得既然要使用,首先就要知道为什么要用?该不该用?如果说我们的项目就俩人开发的一个小项目,又没有前后端分离,而且有比较急着上线,那我觉得这种真是没有必要用swagger。这里只是举个例子,就是告诉大家没有必要为了swagger而swagger。我认为swagger更适合前后端分离情况,或者需要协同开发给别人提供接口测试的时候使用。在这种情况下能够提高协同的效率。

qq_35771266的博客 3098

游戏开发实战:5种AOI算法对比(九宫格 vs 灯塔 vs 十字链表)

本文深入对比了游戏开发中五种主流AOI算法(九宫格、灯塔、十字链表等)的性能与适用场景,帮助开发者根据项目规模选择最优解决方案。通过详细的技术分析和实战数据,揭示不同算法在万人同屏等极端场景下的表现差异,为MMORPG等大型多人在线游戏提供关键性能优化指南。

weixin_29268385的博客 476

FOFA奇技淫巧:从搜索语法到实战场景的深度挖掘

本文深入探讨了FOFA搜索语法在网络空间测绘中的高效应用,从基础语法到实战场景的深度挖掘。通过渗透测试、威胁狩猎、资产发现等实际案例,展示了如何利用FOFA精准定位目标系统、识别蜜罐、追踪威胁,并提供了合规使用指南和性能优化技巧,助力安全工作者提升效率。

weixin_32428571的博客 238

SpringBoot——整合Swagger

Swagger是一款基于RESTful接口的用于文档在线自动生成和功能测试的开发工具 为了减少前后端开发人员在开发期间的频繁沟通,可以使用Swagger提供的接口文档和线上接口进行前后端功能联调

生命的痕迹 3596

【高清照片】深圳光博会看PCIe Over Fibre 实现方案

本文分析了PCIe over Fibre技术及其在数据中心的应用前景。该技术通过光纤延伸PCIe总线,解决了传统铜缆距离限制问题,支持跨机架资源池化。目前主要有两种实现方式:CDFP混合光缆方案和Retimer转接卡方案,各有优缺点。文章还探讨了CDFP接口的现状、低速信号传输解决方案,以及PCIe速率与光通信发展的对应关系。最后对比了PCIe光缆与以太网光缆的关键差异,指出PCIe光互连在协议透明度和边带信号处理上的特殊要求。随着标准推进,PCIe over Fibre将成为数据中心扩展高带宽、低时延互连

Saniffer的博客 1392

SpringBoot3整合Swagger

之前一直使用SpringBoot2与Swagger2,所以感觉都很顺利,因网上资源也比较多问题不大。但是自从更新idea2024、jdk17之后,很多依赖都是比较新的版本,之前的很多东西需要去适应新版本就会出现很多bug,网上的很多办法不好用,只好在改好bug之后记录一下,以便大家一起学习。提示Springdoc-OpenAPI 使用教程-优快云博客。

weixin_41863745的博客 1311

AI Agent开发实战:100个真实场景题库解析

AI Agent开发涉及复杂的需求理解、架构设计及安全防护等关键技术环节。在工程实践中,开发者常面临需求偏差、系统崩溃等挑战,特别是在金融、医疗等高要求场景下。通过真实案例题库,开发者能系统性地掌握需求分析、架构决策树建模(如向量数据库选型)、安全攻防策略(如提示词注入防御)等核心技能。这些实战经验不仅能提升Agent的可用性和安全性,还能优化其在电商客服、智能家居等场景中的表现。题库采用动态难度系统,覆盖从基础到高级的开发挑战,是AI工程化落地的重要参考。

weixin_29057695的博客 347

【重启后nvidia-smi 命令出现错误】

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

qq_44769377的博客 5212
上一篇: 自学springboot之整合shiro +thymeleaf
下一篇: 自学Springcloud,超详细笔记
codebeef
博客等级 码龄7年 8粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值