Swagger技术

1.什么是swagger

Swagger 是⼀款 RESTFUL 接⼝的⽂档在线⾃动⽣成+功能测试功能软件。 Swagger 是⼀个规范和完整的框架, ⽤于⽣成、描述、调⽤和可视化 RESTful ⻛格的 Web 服务。⽬标是使客户端和⽂件系统作为服务器以同样的速 度来更新⽂件的⽅法,参数和模型紧密集成到服务器。 这个解释简单点来讲就是说, swagger 是⼀款可以根据 RESTful ⻛格⽣成的⽣成的接⼝开发⽂档,并且⽀持做测 试的⼀款中间软件。

1.1为什么使用swagger

为什么使⽤ Swagger 我们从三个⽅⾯去说它:

对于后端开发⼈员

  • 不⽤再⼿写 WiKi 接⼝拼⼤量的参数,避免⼿写错误
  • 对代码侵⼊性低,采⽤全注解的⽅式,开发简单
  • ⽅法参数名修改、增加、减少参数都可以直接⽣效,不⽤⼿动维护
  • 缺点:增加了开发成本,写接⼝还得再写⼀套参数配置

对于前端开发

  • 后端只需要定义好接⼝,会⾃动⽣成⽂档,接⼝功能、参数⼀⽬了然
  • 联调⽅便,如果出问题,直接测试接⼝,实时检查参数和返回值,就可以快速定位是前端还是后端的问题

对于测试

  • 对于某些没有前端界⾯ UI 的功能,可以⽤它来测试接⼝
  • 操作简单,不⽤了解具体代码就可以操作
  • 操作简单,不⽤了解具体代码就可以操作

2.如何实现的

2.1导包

XML 复制代码
    <dependencies>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

2.2配置application.yml

XML 复制代码
server:
  port: 8010
springdoc:
  swagger-ui:
    path: /swagger-ui.html

2.3写配置类(config.SwaggerConfiger.java)

java 复制代码
package com.jiazhong.mingxing.boot.boot10.config;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import org.springframework.context.annotation.Configuration;
@OpenAPIDefinition(
        info =@Info(
                title = "我是swagger3",
                description = "这是我的第一个swagger3",
                version = "v1.0.0",
                contact= @Contact(
                        name = "张三",
                        email = "zhangsan@qq.com"
        )
        )
)

2.4写API(controller.FirstController.java)

java 复制代码
package com.jiazhong.mingxing.boot.boot10.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/first")
@Tag(name = "firstController",description = "一个测试接口API")
public class FirstController {

    @GetMapping("/a")
    @Operation(description = "a方法,调用后会获取到一些信息")
    public String a(){
        return "This is FirstController`a method!";
    }
}

启动后在浏览器中输入localhost:8010/swagger-ui.html启动

3.相关注解

  • 基 本 信 息 注 解
  • 分 组 注 解
  • 请 求 ⽅ 法 注 解
  • 响 应 注 解

注 解 相 关 规 范 :https://openapi.xiniushu.com/

3.1基本信息注解

3.2分组注解

⽤于对 API 进⾏分组。可以在控制器类或⽅法级别上使⽤。

3.3请求方法注解

以下注解⽤于描述 API 的请求⽅法:

3.4响应注解

以下注解可以在请求⽅法注解 @Operation 中使⽤,也可以单独使⽤。 以下注解⽤于描述 API 的响应结果:

示例:

java 复制代码
package com.jiazhong.mingxing.boot.boot10.controller;

import com.jiazhong.mingxing.boot.boot10.bean.Book;
import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/book")
@Tag(name = "bookController",description = "图书接口,实现了图书的添加、修改、上传图书信息等操作",
        externalDocs = @ExternalDocumentation(description = "参考文档",url = "https://www.baidu.com")
)
public class BookController {
    @PostMapping("/save")
    @Operation(
            description = "图书录入接口,将数据录入到数据库中",
            parameters = {
                    @Parameter(name = "bookName",description = "图书名称",required = true),
                    @Parameter(name = "number",description = "图书的数量,要求数量大于0"),
                    @Parameter(name = "price",description = "图书的价格,单位人民币")
            },
            responses = {
                    @ApiResponse(
                            description = "成功的返回,返回success",responseCode = "200"
                    ),
                    @ApiResponse(
                            description = "失败的返回,返回error",responseCode = "500"
                    )
            }
    )
    public String save(String bookName, int number, HttpServletResponse response){
        int num=(int)(Math.random()*100+1);
        if (num%2==0){
            response.setStatus(200);
            return "success";
        }
        response.setStatus(500);
        return "error";
    }
    @Operation(
            description = "修改API接口",
            parameters = {
                    @Parameter(name = "图书信息")
            }
    )
    @PutMapping("/update")
    public String update(Book book){

        return "success";
    }

}
相关推荐
黎雁·泠崖24 分钟前
Java面向对象:this关键字+构造方法+标准JavaBean
java·开发语言·python
sheji341636 分钟前
【开题答辩全过程】以 基于Java的智慧环卫垃圾收运管理系统设计与实现为例,包含答辩的问题和答案
java·开发语言
jason成都44 分钟前
实战 | 国产数据库 R2DBC-JDBC 桥接踩坑记 - JetLinks适配达梦数据库
java·数据库·物联网
BullSmall1 小时前
SEDA (Staged Event-Driven Architecture, 分阶段事件驱动架构
java·spring·架构
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-DDD(领域驱动设计)核心概念及落地架构全总结(含事件驱动协同逻辑)
java·人工智能·spring boot·微服务·架构·事件驱动·领域驱动
黎雁·泠崖1 小时前
Java&C语法对比:分支与循环结构核心全解析
java·c语言
鹿角片ljp2 小时前
Java IO流案例:使用缓冲流恢复《出师表》文章顺序
java·开发语言·windows
毕设源码-郭学长2 小时前
【开题答辩全过程】以 广告投放管理系统为例,包含答辩的问题和答案
java
小北方城市网2 小时前
SpringBoot 集成 RabbitMQ 实战(消息队列解耦与削峰):实现高可靠异步通信
java·spring boot·python·微服务·rabbitmq·java-rabbitmq·数据库架构
java_t_t2 小时前
Maven插件apiscan介绍与使用
java·maven·api文档·maven插件