目录

前言

一、配置类配置Swagger

二、属性文件配置Swagger

三、配置多个分组

四、配置扫描接口

五、空指针异常


前言

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。简单来说,swagger是一款可以根据RESTful 风格生成的接口开发文档,并且支持做测试的一款中间软件。在前后端分离的时代,特别是在Swagger诞生之后,程序员门可以直接通过代码生成文档,而不再需要自己手动编写API接口文档了。Swagger在一定程度上也能缓解前端、后端、测试开发人员之间不可调和的矛盾,是一款劝架神器。在正式发布的时候要关闭swagger,以便节省内存,保证安全。

一、配置类配置Swagger

1、导入相关依赖:springfox-boot-starter

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

2、编写Swagger配置类

(1) 可以自定义编写Swagger的配置信息,覆盖默认的apiInfo,通过localhost:8080/swagger-ui/index.html去访问Swagger后台

//配置swagger信息:通过覆盖默认的apiInfoprivate ApiInfo apiInfo() {//配置作者的信息Contact contact = new Contact("全村第二帅", "https://blog.csdn.net/qq_53860947?type=blog", "279618364@qq.com");return new ApiInfo("自定义api文档","码道万古如长夜","v3.0","https://blog.csdn.net/qq_53860947?type=blog",contact,"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList());}

(2)配置swagger Docket的bean实例及完整代码

注:要在启动类上加上@EnableWebMvc,否者会报空指针异常

package com.study.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;import java.util.ArrayList;@Configuration
@EnableOpenApi
public class SwaggerConfig {@Bean //配置了swagger的Docket的bean实例public Docket docket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())//.enable(false).select()//RequestHandlerSelectors,配置要扫描接口的方式/* basePackage指定扫描的包;any();扫描全部;none();都不扫描;withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象withMethodAnnotation:扫描方法上的注解.paths()过滤什么路径.enable()是否启用Swagger,默认是true,若为false,则Swagger不能访问,并且会有一个小表情出现*/.apis(RequestHandlerSelectors.basePackage("com.study.controller")).paths(PathSelectors.ant("/study/**")).build();}//配置swagger信息:通过覆盖默认的apiInfoprivate ApiInfo apiInfo() {//配置作者的信息Contact contact = new Contact("全村第二帅", "https://blog.csdn.net/qq_53860947?type=blog", "7758258@qq.com");return new ApiInfo("自定义api文档","码道万古如长夜","v3.0","https://blog.csdn.net/qq_53860947?type=blog",contact,"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList());}}

二、属性文件配置Swagger

1、用属性配置文件配置Swagger的信息

application.properties:

#配置Swagger的信息
swagger:title: 自定义api文档basePackage: com.study.swagger2.controllerdescription: 码道万古如长夜version: V3.0name: 全村第二帅url: https://blog.csdn.net/qq_53860947?type=blogemail: 7758258@qq.com

2、配置类

SwaggerConfig.java :

package com.study.swagger2.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;
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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;@Configuration
@EnableOpenApi
@EnableWebMvc
public class SwaggerConfig {@Value("${swagger.basePackage}")private String basePackage;       // basePackage指定扫描的包@Value("${swagger.title}")private String title;           // 自定义当前文档的标题@Value("${swagger.description}")private String description;         // 自定义当前文档的详细描述@Value("${swagger.version}")private String version;         // 自定义当前文档的版本//自定义作者的信息,包括作者名字、个人主页、邮箱等相关信息@Value("${swagger.name}")private String name;@Value("${swagger.url}")private String url;@Value("${swagger.email}")private String email;@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage(basePackage)).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {Contact contact = new Contact(name,url,email);return new ApiInfoBuilder().title(title).description(description).version(version).contact(contact).build();}
}

3、结果

三、配置多个分组

1、配置API文档默认组

.groupName("全村第二帅")

2、如何配置多个分组协同开发

创建多个Docket实例即可,且分组不允许重名,在swagger界面下拉框中可以看见

@Beanpublic Docket docket1() {return new Docket(DocumentationType.SWAGGER_2).groupName("村长最帅");}@Beanpublic Docket docket2() {return new Docket(DocumentationType.SWAGGER_2).groupName("测试组");}@Beanpublic Docket docket3() {return new Docket(DocumentationType.SWAGGER_2).groupName("运维组");}

四、配置扫描接口

1、配置扫描接口的好处在于:

1)可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息

2)接口文档实时更新

3)可以在线进行测试

2、给实体类接口添加注释信息

@ApiModel("用户实体类")
public class User  {@ApiModelProperty("用户名")public String username; //如果设置私有属性private,在swagger端Models中将不再显示@ApiModelProperty("密码")public String password;

只要我们的接口中,返回值存在实体类,它就会被扫描到swagger中去

 如果设置私有属性private,在swagger端Models中将不再显示。但如果设置属性为public,后面又接收不到参数值,也许你会说设置setter,getter方法不就行了,会产生空指针异常。改进如下:

@ApiModel("用户实体类")
public class User  {@ApiModelProperty("用户名")private String username; @ApiModelProperty("密码")private String 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;}
}

3、给控制类接口添加注释信息

@Api作用在类上,@ApiOperation作用在方法上

package com.study.controller;import com.study.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.RestController;
@Api(tags ="HelloController",description ="Hello控制类") //作用在类上,ApiOperation作用在方法上
@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "你好呀!";}//只要我们的接口中,返回值存在实体类,它就会被扫描到swagger中去@PostMapping(value="/user")public User user(){return new User();}@ApiOperation("Get传参数")@GetMapping(value = "/hello2")public String hello2(@ApiParam("用户名") String username,@ApiParam("密码") String password){return "hello"+username+password;}@ApiOperation("Post传参数")@PostMapping(value = "/hello3")public User hello2(@ApiParam(value = "用户名",required = true) User user ){return user;}
}

4、测试传参

1)这里传递参数的形式默认是JSON格式的,为什么呢?第一,使用了@RestController注解;第二,在执行测试后,方法体中数据格式是JSON格式的。

2) post方法测试

在输入用户名和密码后,点击执行 ,我们能看到请求的URL和Post方法的响应体

3)get方法测试

点击“Try it  out”才能输入参数的值,这里的响应体与Get传参数方法的返回值一致

五、空指针异常

1、第一种情况:Swagger3.0空指针异常,可能由于Springboot版本过高,导致不兼容

有两种可行的解决方案:

1)降低版本,将版本降为2.5.7及以下,在配置类中加上@EnableSwagger2或@EnableOpenApi均可

高版本的Swagger在URL栏中输入:localhost:8080/swagger-ui/index.html;低版本的Swagger在URL栏中输入:localhost:8080/swagger-ui.html

2)添加springfox-boot-starter依赖,在配置类中加上@EnableOpenApi,在启动类上加上@EnableWebMvc注解

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

在URL栏中输入:localhost:8080/swagger-ui/index.html

2、第二种情况的空指针异常 

原因:swagger在生成接口参数记录对象时,会保留参数对象中getter方法的属性,如果又使用public修饰了属性,则会造成冲突

解决方法:将实体类中的public改为private即可或者去掉getter方法

Swagger3.0快速开发及空指针异常的解决相关推荐

  1. .Net6.0快速开发平台3.4新版源码(教程运行视频齐全),net敏捷开发

    .Net6.0快速开发平台3.4新版源码(教程运行视频齐全),net敏捷开发,全网最新有演示,报表设计,大屏设计,流程设计,实时通讯,动态表单,日程管理,APP端,双端代码生成全部具备,是你接外包的利 ...

  2. Cognos 11.0快速开发指南 Ⅰ

    1. 概述 Cognos Analysics 11,是IBM在Cognos BI 10的版本基础上,吸取业界流行的敏捷BI理念,强化了自助式分析的一款强大BI开发平台工具.其官方文档内容丰富,但是较为 ...

  3. Cognos 11.0快速开发指南

    1. 概述 Cognos Analysics 11,是IBM在Cognos BI 10的版本基础上,吸取业界流行的敏捷BI理念,强化了自助式分析的一款强大BI开发平台工具.其官方文档内容丰富,但是较为 ...

  4. php的miss路由,ThinkPHP6.0 MISS路由 - ThinkPHP6.0快速开发手册(案例版) - php中文网手册...

    MISS路由/默认路由 如果路由匹配失败, 将它重定向到一个指定的路由是个好主意 全局MISS路由 如果路由匹配失败, 将它重定向到一个指定的路由是个好主意 如果希望在没有匹配到所有的路由规则后执行一 ...

  5. php路由地址,ThinkPHP6.0路由地址 - ThinkPHP6.0快速开发手册(案例版) - php中文网手册...

    路由访问地址 所谓路由地址, 就是用户真实的访问地址, 或者路由表达式的真实映射 路由到控制器/操作 这是最常用的一种路由方式,把满足条件的路由规则路由到相关的控制器和操作,然后由系统调度执行相关的操 ...

  6. php 模板渲染,ThinkPHP6.0模板渲染 - ThinkPHP6.0快速开发手册(案例版) - php中文网手册...

    模板渲染生成页面 模板渲染, 其实就是生成前端页面 模板路径 默认情况下,框架会自动定位你的模板文件路径,优先定位应用目录下的view目录,这种方式的视图目录下就是应用的控制器目录. 单应用模式 ├─ ...

  7. 轻流·无代码系统搭建平台 快速开发平台3.4.5 版本 JNPF

    轻流 轻流无代码系统搭建平台,拥有完备的组织架构体系,支撑企业有效管理员工信息生命全周期.支持通过SSO对接第三方账号体系.支持同步企业微信.钉钉.飞书等组织架构 集团式部门架构 多级分权的部门结构, ...

  8. 基于浮云绘图 快速开发车站状态图

    高铁.地铁等火车进出车站时,需要实时监控轨道.道岔.信号机等设备的状态,涉及设备数千个,如果形象.实时的展示设备状态,是一个不小的难题. 抽象的图形化的车站站场图,是业内成熟的方式.但是,要么性能(刷 ...

  9. Jeecg-Boot 2.0.0 版本发布,基于Springboot+Vue 前后端分离快速开发平台

    Jeecg-Boot 2.0.0 版本发布,前后端分离快速开发平台 Jeecg-Boot项目简介 源码下载 升级日志 Issues解决 v1.1升级到v2.0不兼容地方 系统截图 Jeecg-Boot ...

最新文章

  1. zabbix 概念理解
  2. 滑动换屏——Fragment
  3. 20145202、20145225、20145234 《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验...
  4. linux permit用法,技术|12 条实用的 zypper 命令范例
  5. python PyQt5 slot插槽(pyqtSignal、pyqtSlot)
  6. mysql 建索引_mysql数据库正确建立索引及使用
  7. 浅谈RDMA流控设计
  8. python3调用adb命令_如何使用Python执行adb命令?
  9. android o 跨进程广播,[Android] Android O 广播限制
  10. OpenGL中的Uniform block size 的大小限制
  11. Maven项目 之eclipse操作篇
  12. 扼杀 304,Cache-Control: immutable
  13. spring boot 对象拷贝工具(Orika)
  14. 听说你想进玩TikTok?
  15. java中action类是干嘛的_java中action的作用
  16. Python爬虫框架Scrapy报错:ModuleNotFoundError: No module named 'scrapy'
  17. 如何去管理Java项目
  18. vue项目之页面底部出现白边及空白区域错误记录
  19. 2018年清华美院交叉学科保研面试经验
  20. 豆子特斯拉,豆箕宁德时代

热门文章

  1. JS基础—PC端网页特效
  2. 深度学习:常见深度学习框架【Theano、TensorFlow、Keras、Caffe/Caffe2、MXNet、CNTK、PyTorch】
  3. 共享自习室预约小程序APP系统开发设计方案
  4. 复制mathtype到Word时
  5. ArkID 一账通:企业级开源IDaaS/IAM平台系统
  6. 模式识别研究生:三维点云从零开始学习
  7. 年轻人,你的目标不该是成为斜杠青年
  8. 运动耳机怎么选,盘点目前适合运动的几款耳机
  9. pdfbox读取pdf图片,截取图片, tess4j 图片文字识别
  10. 杭州个人小客车摇号百分之百中签率所需要的时间预测和阶梯摇号概率提升