spring boot整合Swagger2的示例代码
swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化restful风格的 web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许api来始终保持同步。swagger 让部署管理和使用功能强大的api从未如此简单。
1.代码示例
1).在pom.xml文件中引入swagger2
<dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger2</artifactid> <version>2.6.1</version> </dependency> <dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger-ui</artifactid> <version>2.6.1</version> </dependency>
2).在application同级目录下添加swagger2的配置类
package com.example; 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; @configuration @enableswagger2 public class swagger2config { @bean public docket createrestapi() { return new docket(documentationtype.swagger_2) .apiinfo(apiinfo()) .select() .apis(requesthandlerselectors.basepackage("com.example")) .paths(pathselectors.any()) .build(); } private apiinfo apiinfo() { return new apiinfobuilder() .title("spring boot中使用swagger2构建restful apis") .description("spring boot整合swagger2") .termsofserviceurl("www.baidu.com") .contact("牛头人") .version("1.0") .build(); } }
如上代码所示,通过 @configuration 注解,让spring来加载该类配置。再通过 @enableswagger2 注解来启用swagger2。
通过 createrestapi 函数创建 docket 的bean之后, apiinfo() 用来创建该api的基本信息(这些基本信息会展现在文档页面中)。 select() 函数返回一个 apiselectorbuilder 实例用来控制哪些接口暴露给swagger来展现,本例采用指定扫描的包路径来定义,swagger会扫描该包下所有controller定义的api,并产生文档内容(除了被 @apiignore 指定的请求)。
3).新建user实体类
package com.example.swagger2; public class user { private string id; private string name; public string getid() { return id; } public void setid(string id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } }
4).新建swaggerdemocontroller类
package com.example.swagger2; import java.util.arraylist; import java.util.collections; import java.util.hashmap; import java.util.list; import java.util.map; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.requestbody; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.restcontroller; import io.swagger.annotations.api; import io.swagger.annotations.apiimplicitparam; import io.swagger.annotations.apiimplicitparams; import io.swagger.annotations.apioperation; import io.swagger.annotations.apiresponse; import io.swagger.annotations.apiresponses; @restcontroller @requestmapping(value="/api") @api("swaggerdemocontroller相关api") public class swaggerdemocontroller { static map<string, user> users = collections.synchronizedmap(new hashmap<string, user>()); @apioperation(value="获取用户列表", notes="") @apiresponses({ @apiresponse(code=400,message="请求参数没填好"), @apiresponse(code=404,message="请求路径没有或页面跳转路径不对") }) @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") @apiresponses({ @apiresponse(code=400,message="请求参数没填好"), @apiresponse(code=404,message="请求路径没有或页面跳转路径不对") }) @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",paramtype="path", required = true, datatype = "string") @apiresponses({ @apiresponse(code=400,message="请求参数没填好"), @apiresponse(code=404,message="请求路径没有或页面跳转路径不对") }) @requestmapping(value="/{id}", method=requestmethod.get) public user getuser(@pathvariable string id) { system.out.println("id="+id); return users.get(id); } @apioperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息") @apiimplicitparams({ @apiimplicitparam(name = "id", value = "用户id",paramtype="path", required = true, datatype = "string"), @apiimplicitparam(name = "user", value = "用户详细实体user", required = true, datatype = "user") }) @apiresponses({ @apiresponse(code=400,message="请求参数没填好"), @apiresponse(code=404,message="请求路径没有或页面跳转路径不对") }) @requestmapping(value="/{id}", method=requestmethod.put) public string putuser(@pathvariable string id, @requestbody user user) { system.out.println("id="+id); user u = users.get(id); u.setname(user.getname()); users.put(id, u); return "success"; } @apioperation(value="删除用户", notes="根据url的id来指定删除对象") @apiimplicitparam(name = "id", value = "用户id",paramtype="path", required = true, datatype = "string") @apiresponses({ @apiresponse(code=400,message="请求参数没填好"), @apiresponse(code=404,message="请求路径没有或页面跳转路径不对") }) @requestmapping(value="/{id}", method=requestmethod.delete) public string deleteuser(@pathvariable string id) { system.out.println("id="+id); users.remove(id); return "success"; } }
说明:
@api:用在类上,说明该类的作用
@apioperation:用在方法上,说明方法的作用
@apiimplicitparams:用在方法上包含一组参数说明
@apiimplicitparam:用在@apiimplicitparams注解中,指定一个请求参数的各个方面
paramtype:参数放在哪个地方
header-->请求参数的获取:@requestheader
query-->请求参数的获取:@requestparam
path(用于restful接口)-->请求参数的获取:@pathvariable
body(不常用)
form(不常用)
name:参数名
datatype:参数类型
required:参数是否必须传
value:参数的意思
defaultvalue:参数的默认值
@apiresponses:用于表示一组响应
@apiresponse:用在@apiresponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
@apimodel:描述一个model的信息(这种一般用在post创建的时候,使用@requestbody这样的场景,请求参数无法使用@apiimplicitparam注解进行描述的时候)
@apimodelproperty:描述一个model的属性
通过 @apioperation 注解来给api增加说明、通过 @apiimplicitparams 、 @apiimplicitparam 注解来给参数增加说明。
需要注意的是:
如果apiimplicitparam中的phone的paramtype是query的话,是无法注入到rest路径中的,而且如果是path的话,是不需要配置apiimplicitparam的,即使配置了,其中的value="用户id"也不会在swagger-ui展示出来。
具体其他的注解,查看:
https://github.com/swagger-api/swagger-core/wiki/annotations#apimodel
2.测试:
启动服务,浏览器输入""
get红框:method=requestmethod.get
右边红框:@apioperation
parameter红框:@apiimplicitparams系列注解
response messages红框:@apiresponses系列注解
输入参数后,点击"try it out!",查看响应内容:
以上所述是小编给大家介绍的spring boot整合swagger2的示例代码,希望对大家有所帮助