Spring Boot整合Swagger2的完整步骤详解
前言
swagger,中文“拽”的意思。它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,
而且还提供了在线文档的测试。另外swagger很容易构建restful风格的api。
一、swagger概述
swagger是一组围绕openapi规范构建的开源工具,可帮助设计、构建、记录和使用rest api。
简单说下,它的出现就是为了方便进行测试后台的restful形式的接口,实现动态的更新,当我们在后台的接口
修改了后,swagger可以实现自动的更新,而不需要认为的维护这个接口进行测试。
二、swagger常用注解
swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。
- @api:修饰整个类,描述controller的作用
- @apioperation:描述一个类的一个方法,或者说一个接口
- @apiparam:单个参数描述
- @apimodel:用对象来接收参数
- @apiproperty:用对象接收参数时,描述对象的一个字段
- @apiresponse:http响应其中1个描述
- @apiresponses:http响应整体描述
- @apiignore:使用该注解忽略这个api
- @apierror :发生错误返回的信息
- @apiparamimplicitl:一个请求参数
- @apiparamsimplicit 多个请求参数
三、springboot整合swagger
3.1 添加依赖
<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>
3.2 添加swaggerconfiguration
通过@configuration注解,表明它是一个配置类,@enableswagger2开启swagger2。
apiinfo()配置一些基本的信息。apis()指定扫描的包会生成文档。
再通过createrestapi函数创建docket的bean之后,apiinfo()用来创建该api的基本信息(这些基本信息会
展现在文档页面中)。select()函数返回一个apiselectorbuilder实例用来控制哪些接口暴露给swagger来
展现,本例采用指定扫描的包路径来定义,swagger会扫描该包下所有controller定义的api,并产生文档内容
(除了被@apiignore指定的请求)。
package com.lance.learn.springbootswagger.configuration; 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.service.contact; import springfox.documentation.spi.documentationtype; import springfox.documentation.spring.web.plugins.docket; import springfox.documentation.swagger2.annotations.enableswagger2; /** * @author lance(zyh) * @function swagger启动配置类 * @date 2018-07-09 21:24 */ @configuration @enableswagger2 public class swaggerconfiguration { /** * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等 * @return */ @bean public docket createrestfulapi(){ return new docket(documentationtype.swagger_2) .pathmapping("/") .select() .apis(requesthandlerselectors.basepackage("com.lance.learn.springbootswagger.controller")) //暴露接口地址的包路径 .paths(pathselectors.any()) .build(); } /** * 构建 api文档的详细信息函数,注意这里的注解引用的是哪个 * @return */ private apiinfo apiinfo(){ return new apiinfobuilder() //页面标题 .title("spring boot 测试使用 swagger2 构建restful api") //创建人 .contact(new contact("lanvetobigdata", "http://www.cnblogs.com/zhangyinhua/", "917484312@qq.com")) //版本号 .version("1.0") //描述 .description("api 描述") .build(); } }
3.3 controller文档内容
描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。
如下所示,我们通过@apioperation注解来给api增加说明、通过@apiimplicitparams、@apiimplicitparam
注解来给参数增加说明。
1)实例一
package com.lance.learn.springbootswagger.controller; import com.lance.learn.springbootswagger.bean.book; import io.swagger.annotations.apiimplicitparam; import io.swagger.annotations.apiimplicitparams; import io.swagger.annotations.apioperation; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.apiignore; import java.util.*; /** * @author lance(zyh) * @function * @date 2018-07-09 21:39 */ @restcontroller @requestmapping(value = "/bookcurd") public class bookcontroller { map<long, book> books = collections.synchronizedmap(new hashmap<long, book>()); @apioperation(value="获取图书列表", notes="获取图书列表") @requestmapping(value={""}, method= requestmethod.get) public list<book> getbook() { list<book> book = new arraylist<>(books.values()); return book; } @apioperation(value="创建图书", notes="创建图书") @apiimplicitparam(name = "book", value = "图书详细实体", required = true, datatype = "book") @requestmapping(value="", method=requestmethod.post) public string postbook(@requestbody book book) { books.put(book.getid(), book); return "success"; } @apioperation(value="获图书细信息", notes="根据url的id来获取详细信息") @apiimplicitparam(name = "id", value = "id", required = true, datatype = "long",paramtype = "path") @requestmapping(value="/{id}", method=requestmethod.get) public book getbook(@pathvariable long id) { return books.get(id); } @apioperation(value="更新信息", notes="根据url的id来指定更新图书信息") @apiimplicitparams({ @apiimplicitparam(name = "id", value = "图书id", required = true, datatype = "long",paramtype = "path"), @apiimplicitparam(name = "book", value = "图书实体book", required = true, datatype = "book") }) @requestmapping(value="/{id}", method= requestmethod.put) public string putuser(@pathvariable long id, @requestbody book book) { book book1 = books.get(id); book1.setname(book.getname()); book1.setprice(book.getprice()); books.put(id, book1); return "success"; } @apioperation(value="删除图书", notes="根据url的id来指定删除图书") @apiimplicitparam(name = "id", value = "图书id", required = true, datatype = "long",paramtype = "path") @requestmapping(value="/{id}", method=requestmethod.delete) public string deleteuser(@pathvariable long id) { books.remove(id); return "success"; } @apiignore//使用该注解忽略这个api @requestmapping(value = "/hi", method = requestmethod.get) public string jsontest() { return " hi you!"; } }
2)实例二
package com.lance.learn.springbootswagger.controller; import com.lance.learn.springbootswagger.bean.user; import io.swagger.annotations.apiimplicitparam; import io.swagger.annotations.apiimplicitparams; import io.swagger.annotations.apioperation; import org.springframework.web.bind.annotation.*; import java.util.*; /** * @author lance(zyh) * @function * @date 2018-07-09 22:00 */ @restcontroller @requestmapping(value="/users") public class userdetailcontroller { static map<long, user> users = collections.synchronizedmap(new hashmap<long, user>()); @apioperation(value="获取用户列表", notes="") @requestmapping(value={""}, method= requestmethod.get) public list<user> getuserlist() { list<user> r = new arraylist<user>(users.values()); return r; } @apioperation(value="创建用户", notes="根据user对象创建用户") @apiimplicitparam(name = "user", value = "用户详细实体user", required = true, datatype = "user") @requestmapping(value="", method=requestmethod.post) public string postuser(@requestbody user user) { users.put(user.getid(), user); return "success"; } @apioperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息") @apiimplicitparam(name = "id", value = "用户id", required = true, datatype = "long") @requestmapping(value="/{id}", method=requestmethod.get) public user getuser(@pathvariable long id) { return users.get(id); } @apioperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息") @apiimplicitparams({ @apiimplicitparam(name = "id", value = "用户id", required = true, datatype = "long"), @apiimplicitparam(name = "user", value = "用户详细实体user", required = true, datatype = "user") }) @requestmapping(value="/{id}", method=requestmethod.put) public string putuser(@pathvariable long id, @requestbody user user) { user u = new user(); users.put(id, u); return "success"; } @apioperation(value="删除用户", notes="根据url的id来指定删除对象") @apiimplicitparam(name = "id", value = "用户id", required = true, datatype = "long") @requestmapping(value="/{id}", method=requestmethod.delete) public string deleteuser(@pathvariable long id) { users.remove(id); return "success"; } }
3.4 web界面查看
四、项目代码地址
https://github.com/lancetobigdata/springbootlearning/tree/develop/springboot-swagger
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
推荐阅读
-
Spring Boot整合Swagger2的完整步骤详解
-
Spring Boot整合elasticsearch的详细步骤
-
Spring Boot整合ElasticSearch实现多版本兼容的方法详解
-
spring boot + quartz集群搭建的完整步骤
-
详解spring cloud整合Swagger2构建RESTful服务的APIs
-
Spring Boot整合ElasticSearch实现多版本兼容的方法详解
-
Spring Boot应用Docker化的步骤详解
-
spring boot + quartz集群搭建的完整步骤
-
Spring Boot整合Redis的完整步骤
-
详解spring cloud整合Swagger2构建RESTful服务的APIs