百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

SpringBoot系列(七)Api接口文档swagger详解

yuyutoo 2024-10-12 01:50 4 浏览 0 评论

Springboot 配置接口文档swagger

往期推荐

idea新建springboot项目

SpringBoot系列(二)入门知识讲解

SpringBoot系列(三)项目配置文件详解

Springboot系列(四)web静态资源配置

SpringBoot笔记(五)Mybatis整合,详解版

SpringBoot系列(六)thymeleaf完整详细版

本文目录

  1. swagger2介绍
  2. maven 配置swagger2依赖
  3. swagger2 配置
  4. controller 测试编写以及注解说明
    1. 单个参数
    2. 多个参数用法
    3. 参数是对象用法
  5. 接口测试
  6. 总结

1. swagger2 介绍

1.1 简介

?Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。

?随着前后端技术的日渐成熟,前后端的交互就只有接口了,前端请求接口获取数据,所以接口的格式化也就相当重要,有一个标准格式的接口文档在开发过程中是相当重要的,swagger就是这么一个在线的接口文档,在SpringBoot的集成之中也相当便利。

?swagger可以自动生成在线接口文档,界面可视化的同时保证了便利的测试接口。

2. maven 配置swagger2依赖

?创建一个SpringBoot web 项目,然后在pom.xml中添加如下依赖:

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

?可以根据自己的SringBoot版本适当降低swagger2 的版本。

3. swagger2 配置

?在Springboot启动类的同级目录下面创建一个config的包,然后创建一个配置Swagger2 的配置类。

package com.example.demoswagger.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.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/** 
 * @author 全栈学习笔记
 * @date 2020/4/19 16:00
 * @description
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                // 指定构建api文档的详细信息的方法:apiInfo()
                .apiInfo(apiInfo())
                .select()
                // 指定要生成api接口的包路径
                .apis(RequestHandlerSelectors.basePackage("com.example.demoswagger.controller"))
                //使用了 @ApiOperation 注解的方法生成api接口文档
                //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                //可以根据url路径设置哪些请求加入文档,忽略哪些请求
                .build();
    }

    /**
     * 设置api文档的详细信息
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 标题
                .title("Spring Boot集成Swagger2")
                // 接口描述
                .description("swagger")
                // 联系方式
                .contact("微信公众号"+"全栈学习笔记"+"359076197@qq.com")
                // 版本信息
                .version("1.0")
                // 构建
                .build();
    }
}

?注意其中的包,不要导错包了。

?配置代码说明:

?1. 使用 @Configuration 注解,标识这是一个配置类,项目启动的时候会自动调用加载,@EnableSwagger2 注解的作用是自动开启swagger2。

?2. apiInfo() 方法里面的参数可以自己设定,在第一个方法中,我们除了可以根据接口所在的包对应生成接口文档还可以根据项目中是否有方法使用了 @ApiOperation注解来判断是否生成api文档。

4. controller 测试编写以及注解说明

?上面我们配置好了swagger api生成的配置之后就可以编写测试的controller,创建一个与config同级的包controller,然后里面写一个TestController

单个参数

@RestController
@RequestMapping("/Test")
@Api("测试swagger接口")
public class TestController {

    @RequestMapping(path = "/getStudent",method = RequestMethod.GET)
    @ApiOperation("/根据学生id获取学生信息")
    @ApiImplicitParam(name = "id",value = "id",required = true,paramType = "query",dataType = "int")
    public Student getStudent(@RequestParam Integer id){
        Student student = new Student();
        student.setId(11);
        student.setAge(21);
        student.setName("全栈学习笔记");
        Map<Integer,Student> studentMap = new HashMap<>();
        studentMap.put(11,student);
        return studentMap.get(id);
    }
}

?其中,Student类等会会贴出来。

代码说明:

  1. @RestController 相当于**@Controller+@ResponseBody** 注解,让标识的这个类返回json格式的数据。
  2. 上面加上**@Api的注解,说明这个类要生成api文档,并给予描述。相当于可以根据这个类作为类别的划分。在类里面的方法加上@ApiOperation** 注解 用来描述这个方法(接口)是用来干嘛的;
  3. @ApiImplicitParam 注解是为了描述这个方法之中的参数。其中的name,value属性你应该知道。required 属性是标识在测试接口时,这个参数是否需要传,true为必须传,false为非必须。
  4. @ApiImplicitParam之中的paramType是标识这个参数应该在哪去获取,常用的有以下几种

header-->放在请求头。请求参数的获取注解:@RequestHeader

query -->常用于get请求的参数拼接。请求参数的获取注解:@RequestParam

path -->(用于restful接口)-->请求参数的获取获取注解:@PathVariable

body -->放在请求体。请求参数的获取注解:@RequestBody

  1. @ApiImplicitParam之中的dataType 是用来标识这个参数的类型,默认为String,如果是数组类型,需要加上allowMultiple=true,表示是数组类型的数据。也可以是自定义的对象类型。

多个参数的用法

@RequestMapping(path = "/getStudent",method = RequestMethod.PATCH)
@ApiOperation("/根据学生id获取学生信息")
@ApiImplicitParams({
    @ApiImplicitParam(name = "name",value = "姓名",required = true,paramType = "query",dataType = "String"),
    @ApiImplicitParam(name = "age",value = "年龄",required = true,paramType = "query",dataType = "int")
})
public Student editStudent(@RequestParam String name, @RequestParam Integer age){
    Student student = new Student();
    student.setId(12);
    student.setName(name);
    student.setAge(age);
    return student;

}

?需要对多个参数进行属性说明时,需要用到 @ApiImplicitParams,然后里面再用 @ApiImplicitParam

参数是对象的用法

controller代码

 @ApiOperation("/添加学生信息")
    @RequestMapping(path = "/addStudent",method = RequestMethod.POST)
    public Map<Integer,Student> AddStudent(@RequestBody Student student){
        Map<Integer,Student> studentMap = new HashMap<>();
        studentMap.put(student.getId(),student);
        return studentMap;
    }

entity代码:

/**
 * (Student)实体类
 *
 * @author 微信公众号:全栈学习笔记
 * @since 2020-04-14 11:39:10
 */
@ApiModel("学生类")
public class Student {

    /**
    * 唯一标识id
    */
    @ApiModelProperty("id")
    private Integer id;
    /**
    * 姓名
    */
    @ApiModelProperty("姓名")
    private String name;
    /**
    * 年龄
    */
    @ApiModelProperty(value = "年龄")
    private Integer age;
}
?省略get,set方法
?@ApiModelProperty 的属性配置相对之前那个@ApiImplicitParam的属性更多更全。

5. 接口测试

?完成以上步骤,带你们看看swagger的界面如何,启动项目,浏览器输入localhost:8091/swagger-ui.html如下:


?打开之后


?测试一个接口


?结果返回


6.总结

?本期的分享就到这里,文中讲解了swagger2的配置,用法,以及测试,整个流程都讲解的较详细。如果你觉得文章有用,点个赞吧!


相关推荐

Mysql和Oracle实现序列自增(oracle创建序列的sql)

Mysql和Oracle实现序列自增/*ORACLE设置自增序列oracle本身不支持如mysql的AUTO_INCREMENT自增方式,我们可以用序列加触发器的形式实现,假如有一个表T_WORKM...

关于Oracle数据库12c 新特性总结(oracle数据库19c与12c)

概述今天主要简单介绍一下Oracle12c的一些新特性,仅供参考。参考:http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT...

MySQL CREATE TABLE 简单设计模板交流

推荐用MySQL8.0(2018/4/19发布,开发者说同比5.7快2倍)或同类型以上版本....

mysql学习9:创建数据库(mysql5.5创建数据库)

前言:我也是在学习过程中,不对的地方请谅解showdatabases;#查看数据库表createdatabasename...

MySQL面试题-CREATE TABLE AS 与CREATE TABLE LIKE的区别

执行"CREATETABLE新表ASSELECT*FROM原表;"后,新表与原表的字段一致,但主键、索引不会复制到新表,会把原表的表记录复制到新表。...

Nike Dunk High Volt 和 Bright Spruce 预计将于 12 月推出

在街上看到的PandaDunk的超载可能让一些球鞋迷们望而却步,但Dunk的浪潮仍然强劲,看不到尽头。我们看到的很多版本都是为女性和儿童制作的,这种新配色为后者引入了一种令人耳目一新的新选择,而...

美国多功能舰载雷达及美国海军舰载多功能雷达系统技术介绍

多功能雷达AN/SPY-1的特性和技术能力,该雷达已经在美国海军服役了30多年,其修改-AN/SPY-1A、AN/SPY-1B(V)、AN/SPY-1D、AN/SPY-1D(V),以及雷神...

汽车音响怎么玩,安装技术知识(汽车音响怎么玩,安装技术知识视频)

全面分析汽车音响使用或安装技术常识一:主机是大多数人最熟习的音响器材,有关主机的各种性能及规格,也是耳熟能详的事,以下是一些在使用或安装时,比较需要注意的事项:LOUDNESS:几年前的主机,此按...

【推荐】ProAc Response系列扬声器逐个看

有考牌(公认好声音)扬声器之称ProAcTablette小音箱,相信不少音响发烧友都曾经,或者现在依然持有,正当大家逐渐掌握Tablette的摆位设定与器材配搭之后,下一步就会考虑升级至表现更全...

#本站首晒# 漂洋过海来看你 — BLACK&amp;DECKER 百得 BDH2000L无绳吸尘器 开箱

作者:初吻给了烟sco混迹张大妈时日不短了,手没少剁。家里有了汪星人,吸尘器使用频率相当高,偶尔零星打扫用卧式的实在麻烦(汪星人:你这分明是找借口,我掉毛是满屋子都有,铲屎君都是用卧式满屋子吸的,你...

专题|一个品牌一件产品(英国篇)之Quested(罗杰之声)

Quested(罗杰之声)代表产品:Q212FS品牌介绍Quested(罗杰之声)是录音监听领域的传奇品牌,由英国录音师RogerQuested于1985年创立。在成立Quested之前,Roger...

常用半导体中英对照表(建议收藏)(半导体英文术语)

作为一个源自国外的技术,半导体产业涉及许多英文术语。加之从业者很多都有海外经历或习惯于用英文表达相关技术和工艺节点,这就导致许多英文术语翻译成中文后,仍有不少人照应不上或不知如何翻译。为此,我们整理了...

Fyne Audio F502SP 2.5音路低音反射式落地音箱评测

FyneAudio的F500系列,有新成员了!不过,新成员不是新的款式,却是根据原有款式提出特别版。特别版产品在原有型号后标注了SP字样,意思是SpecialProduction。Fyne一共推出...

有哪些免费的内存数据库(In-Memory Database)

以下是一些常见的免费的内存数据库:1.Redis:Redis是一个开源的内存数据库,它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合。Redis提供了快速的读写操作,并且支持持久化数据到磁...

RazorSQL Mac版(SQL数据库查询工具)

RazorSQLMac特别版是一款看似简单实则功能非常出色的SQL数据库查询、编辑、浏览和管理工具。RazorSQLformac特别版可以帮你管理多个数据库,支持主流的30多种数据库,包括Ca...

取消回复欢迎 发表评论: