springboot整合springfox-swagger2

宜春      2022-05-07     157

关键词:

前言

不管Spring Boot整合还是SpringMVC整合Swagger都基本类似,重点就在于配置Swagger,它的精髓所在就在于配置。
@

1、Swagger简介

目前互联网时代前后端分离已成趋势,前后端混在一起,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发。解决方案就是前后端通过API进行交互达到相对独立且松耦合。Swagger就是这样的一个API框架,Swagger支持多种语言 如:JavaPHP等,它号称是世界上最流行的API框架!

2、整合前可能遇到的问题

1、
导入好依赖jar包之后,使用注解说找不到之类的问题,如遇到,请参考:所有Intellij IDEA Cannot Resolve Symbol XXX问题的解决方法汇总

2、
版本问题,SpringBoot的版本很多,被集成的框架版本也很多,可能版本高一点或者低一点就可能出现各种bug,这是集成其他框架的通病,这里得注意一下。如果运行出现一些什么bug,如果对SpringBoot底层原理不是很了解的可以先百度谷歌一下,找不到建议不妨换个SpringBoot的版本

3、SpringBoot集成Swagger

注意:jdk 1.8以上才能运行swagger2

1、
导入两个jar包依赖

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger2</artifactId>
   <version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version>2.9.2</version>
</dependency>

2、
要想使用Swagger,必须编写一个配置类来配置 Swagger,这里的配置类如下

@Configuration //说明这是一个配置类
@EnableSwagger2// 该注解开启Swagger2的自动配置
public class SwaggerConfig {  //随便的一个类名

}

3、
这个时候已经算是初步整合完毕了,启动项目可访问http://localhost:8080/swagger-ui.html 可以看到swagger的界面,如下;
技术图片

4、配置Swagger

不管是Spring Boot整合还是SpringMVC整合Swagger都基本类似,重点就在于配置Swagger,它的精髓所在就在于配置,这很关键。我们从下图来全局看看Swagger的四部分重点布局:
技术图片

4.1、Swagger四部分布局

Swagger实例Bean是Docket,所以必须通过配置Docket实例来配置Swaggger。

第一部分--API分组:如果没有配置分组默认是default。通过Swagger实例Docket的groupName()方法即可配置分组
第二部分--基本描述:可以通过Swagger实例Docket的apiInfo()方法中的ApiInfo实例参数配置文档信息
第三部分--请求接口列表:在组范围内,只要被Swagger2扫描匹配到的请求都会在这里出现。
第四部分--实体列表:只要实体在请求接口的返回值上(即使是泛型),都能映射到实体项中!

第四部分注意:并不是因为@ApiModel注解让实体显示在Models列表里,而是只要出现在接口方法的返回值上的实体都会显示在这里,而@ApiModel和@ApiModelProperty这两个注解只是为实体添加注释的。前者为类添加注释,后者为类属性添加注释。

4.2、第二部分:API基本信息

先从第二部分开始分析,这样分析对理解第一部分比较有帮助。

@Configuration
@EnableSwagger2
@ComponentScan("com.yichun.swagger_boot_demo.controller")
public class SwaggerConfig {
    @Bean
    public Docket docker(){
        // 构造函数传入初始化规范,这是swagger2规范
        return new Docket(DocumentationType.SWAGGER_2)
                //apiInfo: 添加api详情信息,参数为ApiInfo类型的参数,这个参数包含了第二部分的所有信息比如标题、描述、版本之类的,开发中一般都会自定义这些信息
                .apiInfo(apiInfo())
                .groupName("yichun123")
                //配置是否启用Swagger,如果是false,在浏览器将无法访问,默认是true
                .enable(true) 
                .select()
                //apis: 添加过滤条件,
                .apis(RequestHandlerSelectors.basePackage("com.yichun.swagger_boot_demo.controller"))
                //paths: 这里是控制哪些路径的api会被显示出来,比如下方的参数就是除了/user以外的其它路径都会生成api文档
                .paths((String a) ->
                        !a.equals("/user"))
                .build();
    }

    private ApiInfo apiInfo(){
        Contact contact = new Contact("名字:name", "个人链接:http://xxx.xxx.com/", "邮箱:XXX");
        return new ApiInfo(
                      "标题内容", // 标题
                      "描述内容", // 描述
                      "版本内容:v1.0", // 版本
                      "链接:http://terms.service.url/", // 组织链接
                       contact, // 联系人信息
                      "许可:Apach 2.0 ", // 许可
                      "许可链接:XXX", // 许可连接
                      new ArrayList<>()// 扩展
        );
    }
}
1、分析

技术图片

2、RequestHandlerSelectors过滤

点进RequestHandlerSelectors源码,分析如下:
技术图片

4.3、第一部分:配置API分组

实际上,上面的内容就是一个完整的API组

1、配置一个分组
我们之前说过,如果没有配置分组默认是default。通过Swagger实例Docket的groupName()方法即可配置分组,代码如下:

@Bean
public Docket docket2(Environment environment) {
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo()) // 配置基本API信息
      .groupName("hello") // 配置分组
       // 省略配置....
}

2、如何配置多个分组
很简单,配置多个分组只需要配置多个docket即可,代码如下:

@Bean
public Docket docket1(){
   return new Docket(DocumentationType.SWAGGER_2)
      .groupName("组一")
      // 省略配置....
}
@Bean
public Docket docket2(){
   return new Docket(DocumentationType.SWAGGER_2)
     .groupName("组二")
     // 省略配置....
}
@Bean
public Docket docket3(){
   return new Docket(DocumentationType.SWAGGER_2)
     .groupName("组三")
     // 省略配置....
}

4.4、Swagger2的常用注解

讲第三部分和第四部分前,非常有必要先了解swagger2的常用注解,用注解的话,可以给一些比较难理解的属性或者接口,增加一些配置信息,让人更容易阅读!这点也是swagger2的重中之重!

首先我们得知道一点Swagger的所有注解定义在io.swagger.annotations包下。,这里只列出一些常用的注解,如下:
技术图片
如果要详细了解这些注解可以参考swagger2 注解说明

4.5、第三部分:API请求列表

请求接口列表:在组范围内,只要被Swagger2扫描匹配到的请求都会在这里出现。使用注解能更好的提高阅读性。
技术图片

4.6、第四部分:API实体列表

之前说过,只要实体在请求接口的返回值上(即使是泛型),都能映射到实体项中!是的,因此我们第一步是先有实体类。

1、
我们先随便创建一个实体类

@ApiModel("用户实体类")
public class User {
    
    @ApiModelProperty("性别")
    public String sex;

    @ApiModelProperty(value ="用户名",allowableValues = "11,12")
    public int name;  
}

当然@ApiModelProperty注解里有很多属性,也会有许多坑,这里注意一下,本篇文章暂不概述。

2、
只要这个实体在请求接口的返回值上(包括泛型),都能映射到实体项中,所以我们编写代码如下:

 @GetMapping("/User2")
 public User getUser2(){
 
    return new User();
 }

效果如下:
技术图片
本篇文章非常浅显,若有不正之处,欢迎批评指正,感激不尽!

欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...

技术图片
参考:https://mp.weixin.qq.com/s/0-c0MAgtyOeKx6qzmdUG0w

springboot整合其他框架--springboot整合mybatis(代码片段)

1.SpringBoot整合Mybatis需求:SpringBoot整合MyBatis。实现步骤:搭建SpringBoot工程引入mybatis起步依赖,添加mysql驱动编写DataSource和MyBatis相关配置定义表和实体类编写dao和mapper文件/纯注解开发测试1.0公共步骤1.0.1搭建SpringBoot... 查看详情

springboot入门基础:介绍

一.SpringBoot初级(一)SpringBoot入门SpringBoot简介构件SpringBoot项目以及启动器讲解SpringBoot入门HelloWorld(二)SpringBoot整合Web开发整合Servlet整合Filter整合Listener访问静态资源文件上传(三)SpringBoot视图层技术整合jsp技术整合freemarker... 查看详情

springboot整合其他框架--springboot整合junit(代码片段)

1.SpringBoot整合Junit1.1实现步骤分析搭建SpringBoot工程引入starter-test起步依赖和junit依赖编写测试类添加测试相关注解@RunWith(SpringRunner.class)@SpringBootTest(classes=启动类.class)编写测试方法1.2搭建SpringBoot工程1.3导入相关依赖pom.xml... 查看详情

springboot整合其他框架--springboot整合redis(代码片段)

1.SpringBoot整合Redis搭建SpringBoot工程引入redis起步依赖配置redis相关属性注入RedisTemplate模板编写测试方法,测试1.1搭建SpringBoot工程1.2引入redis起步依赖<dependency><groupId>org.springframework.boot</groupId><arti 查看详情

springboot整合shiro(代码片段)

Springboot整合ShiroSpringboot整合Shiro的思路创建Springboot项目引入Shiro依赖配置Shiro环境Shiro常见过滤器Springboot整合Shiro的思路创建Springboot项目引入Shiro依赖<!--引入shiro整合springboot依赖--><dependency><groupId>org.apache. 查看详情

springboot:springboot整合logback和pagehelper

文章目录SpringBoot整合Logback和PageHelper一、整合Logback二、整合PageHelperSpringBoot整合Logback和PageHelper一、整合LogbackSpringBoot默认使用Logback组件作为日志管理。Logback是由log4j创始人设计的一个开源日志组件。在SpringBoot项目中我们不需要... 查看详情

springboot:springboot整合mybatis案例

文章目录SpringBoot整合Mybatis案例一、导入依赖二、编写配置文件三、编写功能代码 查看详情

1springboot整合之springboot整合jsp(代码片段)

SpringBoot整合JSP一、创建SpringBoot项目,仅选择Web模块即可二、在POM文件中添加依赖<!--添加servlet依赖模块--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId>< 查看详情

springboot整合mybatis-plus+durid数据库连接池(代码片段)

...用Eclipse可能操作会略有不同,不过总的来说不影响。springboot整合之如何选择版本及项目搭建springboot整合之版本号统一管理  springboot整合mybatis-plus+durid数据库连接池springboot整合swaggerspringboot整合mybatis代码快速生成springboo... 查看详情

springboot整合jsp

  这几天在集中学习Springboot+Shiro框架,因为之前view层用jsp比较多,所以想在springboot中配置jsp,但是springboot官方不推荐使用jsp,因为jsp相对于一些模板引擎,性能都比较低,官方推荐使用thymeleaf,但是Springboot整合jsp的过程已... 查看详情

(超详解)springboot初级部分-整合其他框架-04(代码片段)

文章目录SpringBoot-整合其他框架-041.SpringBoot整合Junit2.SpringBoot整合Redis3.SpringBoot整洁MyBatisSpringBoot-整合其他框架-04该文章参考:黑马SpringBoot1.SpringBoot整合Junit搭建SpringBoot工程引入starter-test起步依赖<dependency>< 查看详情

springboot整合mybatis

1、springboot配置数据库连接池druid2、springboot整合mybatis3、springboot整合pagehelper  springboot配置数据库连接池druid 新建springboot项目   相关pom依赖druid所需pom依赖 <dependency><groupId> 查看详情

springboot的其他整合相关

springBoot的事物管理1:springBoot整合单数据源事物:  springboot默认集成事物,只主要在方法上加上@Transactional即可 标签:@Transactional    2:springBoot整合多数据源分布式事物:使用springboot+jta+atomikos 分布... 查看详情

springboot整合shiro四:认证+授权

搭建环境见: SpringBoot整合Shiro一:搭建环境shiro配置类见: SpringBoot整合Shiro二:Shiro配置类shiro整合Mybatis见:SpringBoot整合Shiro三:整合Mybatis 认证未授权时ShiroConfig中添加授权访问  如果用户没有拥有user:add就无法访... 查看详情

基于springboot的完成mybatis整合(代码片段)

SpringBoot🍌掌握基于SpringBoot框架的程序开发步骤🍌使用SpringBoot配置信息修改服务器配置🍌SpringBoot完成SSM整合之SpringBoot整合junit今日目标:基于SpringBoot的完成mybatis整合一、SpringBoot整合mybatis1.1回顾Spring整合MybatisS... 查看详情

springboot.04.springboot整合mybatis

SpringBoot.04.SpringBoot整合MyBatis准备工作1.mapper模板2.t_user整合MyBatis1.新建Module2.pom.xml3.application.yml4.Springboot04MybatisApplication.java5.User.java6.UserMapper.java7.UserMapper.xml8.UserService9.User 查看详情

springboot2基于springboot实现ssmp整合(代码片段)

前言​    重头戏来了,SpringBoot之所以好用,就是它能方便快捷的整合其他技术,本文讲解一些技术的整合方式,通过这本文的学习,感受SpringBoot到底有多酷炫。本文学习如下技术的整合方式整合JUnit整... 查看详情

springboot学习笔记-整合mybatis

Springboot学习笔记(二)- 整合MyBatis SpringBoot中整合MyBatis,并通过注解方式实现映射。整合MyBatis以Springboot学习笔记(一)-Helloworld 为基础项目,在pom.xml中添加如下依赖 <dependency>  <groupId>org.mybatis.spring.b... 查看详情