详谈Springfox与swagger的整合使用
一、前言
让我们先理一下springfox与swagger的关系。
swagger是一个流行的api开发框架,这个框架以“开放api声明”(openapi specification,oas)为基础,对整个api的开发周期都提供了相应的解决方案,是一个非常庞大的项目(包括设计、编码和测试,几乎支持所有语言)。
oas本身是一个api规范,它用于描述一整套api接口,包括一个接口是get还是post请求啊,有哪些参数哪些header啊,都会被包括在这个文件中。它在设计的时候通常是yaml格式,这种格式书写起来比较方便,而在网络中传输时又会以json形式居多,因为json的通用性比较强。
由于spring的流行,marty pitt编写了一个基于spring的组件swagger-springmvc,用于将swagger集成到springmvc中来。而springfox则是从这个组件发展而来,同时springfox也是一个新的项目,本文仍然是使用其中的一个组件springfox-swagger2。
pringfox-swagger2依然是依赖osa规范文档,也就是一个描述api的json文件,而这个组件的功能就是帮助我们自动生成这个json文件,我们会用到的另外一个组件springfox-swagger-ui就是将这个json文件解析出来,用一种更友好的方式呈现出来。
这是入门,我们简单地介绍springfox-swagger2的配置,帮助各位顺利地实现使用,文中有很多自己的理解,若有错误,欢迎批评指正。
二、配置流程说明
在开始编码之前,我们先对配置的流程有个大致的了解。
在前言中,我们知道,我们的第一个任务就是生成一个满足osa规范的json文件(当然,创建一个spring的项目就不说了)。对于这个任务,springfox为我们提供了一个docket(摘要的意思)类,我们需要把它做成一个bean注入到spring中,显然,我们需要一个配置文件,并通过一种方式(显然它会是一个注解)告诉程序,这是一个swagger配置文件。
一个osa规范文档需要许多信息来描述这个api,springfox允许我们将信息组合成一个apiinfo的类,作为构造参数传给docket(当然也可以不构造这个类,而直接使用null,但是你的这个api就太low了)。
接下来,我们要写控制器了,当然这不重要,不用springfox你依然要写控制器,重要的是要告诉springfox,这个控制器是一个需要他来收集api信息的控制器,不用说,这依然会采用注解的方式,同时,我们为了将配置文件与控制器结合起来,需要在配置文件中指明在什么位置收集可能是api的控制器的信息。
到这里,生成osa规范的json文件的配置就结束了。虽然生成过程比我叙述的更复杂,但这些程序都会帮我们完成,我们可以通过类似http://localhost:8080/demo/v2/api-docs的路径来查看这个json文件。这个v2/api-docs就是springfox默认的生成文档的路径。
接下来,我们需要将它可视化显示出来,如果使用swagger-springmvc,我们需要单独去下载一个swagger ui的显示页面包,并将其中的路径改为上面的http://localhost:8080/demo/v2/api-docs,这里你就可以感受到,swagger ui就是在解析一个json文件了。你依然可以这么做,不过springfox专门提供了一个springfox-swagger-ui组件,不需要配置,我们只需要引入这个依赖的组件就可以看到最终的效果了,而这个路由会是http://localhost:8080/demo/swagger-ui.html。
三、引入依赖
如果我写的不错,相信看到这里,你就大致了解了springfox swagger2的使用流程了。那么,我们进入正式编码的第一步:引入依赖。
这里我们使用maven引入依赖,大家可以到http://mvnrepository.com上搜索springfox,便可以看到springfox swagger2和springfox swagger ui,然后就可以从中获取最新的资源了。如下:
<dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger2</artifactid> <version>2.7.0</version> </dependency> <dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger-ui</artifactid> <version>2.7.0</version> </dependency>
此外还需要一个依赖组件:
<dependency> <groupid>com.fasterxml.jackson.core</groupid> <artifactid>jackson-databind</artifactid> <version>2.6.6</version> </dependency>
四、一个简单的配置文件
为了清晰,我们可以先在常用的源码包里建一个config目录,并在里面创建一个swaggerconfig.java文件,这是一个spring的配置文件,所以位置和文件名都影响不大。
先上代码:
@configuration //必须存在 @enableswagger2 //必须存在 @enablewebmvc //必须存在 @componentscan(basepackages = {"com.xiaoming.springmvc.controller"}) //必须存在 扫描的api controller package name 也可以直接扫描class (basepackageclasses) public class swaggerconfig{ @bean public docket customdocket() { return new docket(documentationtype.swagger_2) .apiinfo(apiinfo()); } private apiinfo apiinfo() { contact contact = new contact("小明", "//www.jb51.net/", "zhaomin0018@126.com"); return new apiinfobuilder() .title("前台api接口") .description("前台api接口") .contact(contact) .version("1.1.0") .build(); } }
由于各位肯定用的是ide,这里就不写各种import了。
首先,这个swaggerconfig类有四个注解,看名称就可以明白是什么意思。其中,@configuration,@enablewebmvc和@componentscan是spring的注解,而@enableswagger2则是用来启动swagger支持,表示这是一个spring swagger的配置文件。
之后,定义了一个bean方法customdocket,spring中名字并不重要,重要的是它返回一个docket类,documentationtype.swagger_2作为docket构造方法的参数,指定了所用的swagger版本2.0,官网上已经在预告3.0版本了。而之后的apiinfo则是调用接下来的apiinfo函数,来创建docket的信息。apiinfo函数采用apiinfobuilder来创建apiinfo类。
五、一个控制器
其实,控制器不需要配置,就已经会被springfox swagger识别了,不过我们这里象征性地加上一个描述信息:
@controller @requestmapping("/test") public class testcontroller { @apioperation(value="一个测试api",notes = "第一个测试api") @responsebody @requestmapping(value = "/hello",method = requestmethod.get) public string hello() { return "hello"; } }
这里仅仅多了一个@apioperation注解,别的和一个普通的springmvc的控制器完全一致。
实际上,为了形成一个完整的api文档,需要添加的注解常常很多,若是都写在同一个文件里就会显得臃肿,我们常常会写一个接口文件,将注解都放在接口文件中,然后再用一个实体类来实现控制器,算是实现配置和逻辑分离了吧。
六、查看接口文件和文档
若是没有问题,现在可以部署项目,并打开http://localhost:8080/demo/v2/api-docs:
firefox提供了查看json的插件,推荐大家搜索试试看。
废话不多说,这里可以看到之前配置的诸多信息。注入description,version,title等。并且确实有testcontroller的信息。
最后,我们打开http://localhost:8080/swagger-ui.html,便可以看到一个漂亮的界面了:
以上这篇详谈springfox与swagger的整合使用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: Java多态的使用注意事项
推荐阅读
-
详谈Springfox与swagger的整合使用
-
SpringBoot整合Swagger和Actuator的使用教程详解
-
Spring整合Struts2中拦截链与注解的使用
-
java中Memcached的使用实例(包括与Spring整合)
-
详谈Springfox与swagger的整合使用
-
Apache shiro的简单介绍与使用教程(与spring整合使用)
-
浅谈springfox-swagger原理解析与使用过程中遇到的坑
-
JAVAEE——宜立方商城09:Activemq整合spring的应用场景、添加商品同步索引库、商品详情页面动态展示与使用缓存
-
asp.net core 3.0中使用swagger的方法与问题
-
redis与spring整合使用的步骤实例教程