如何让接口文档自动生成,SpringBoot中Swagger的使用
在开发过程中,java后端需要与客户端进行交互,需要将后端的接口及参数写成文档给调用者查阅。一个问题也有此而生,需求改动频繁,接口设计也会随之改动,文档修改的不及时会带来很大的问题。
Swagger是一个自动生成文档的工具,可以在线查阅文档,减少了开发人员的负担,下面我们就来看看如何在SpringBoot中使用Swagger。
一、在SpringBoot项目中配置Swagger2
1、pom.xml中对Swagger2的依赖
<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>
2、编写配置类启用Swagger
Swagger2Config.java
@Configuration //配置类
@EnableSwagger2 //启用Swagger2
public class Swagger2Config {
@Bean
public Docket apiConfig() {
return new Docket(DocumentationType.SWAGGER_2)//创建Swagger2类型的文档
.apiInfo(apiInfo());//apiInfo方法返回配置的接口信息
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("用户中心微服务前台网站API")//接口标题
.description("此文档描述了用户中心前台网站的基本API接口")//接口描述
.version("1.0")//接口版本
.contact(new Contact("Jack", "http://www.jikedaquan.com", "jikedaquan@163.com"))//联系方式:名字、网址、邮箱
.build();
}
}
3、配置实体类的文档
实体类Member
//对实体名生成文档描述
@ApiModel(value="Member对象")
public class Member{
//对属性生成文档描述
@ApiModelProperty(value = "学员ID")
private Long memberId;
//required 将属性描述标记为必须
@ApiModelProperty(value = "手机号",required = true)
private String mobile;
@ApiModelProperty(value = "邮箱",required = true)
private String email;
@ApiModelProperty(value = "密码",required = true)
private String password;
@ApiModelProperty(value = "用户名")
private String userName;
//将不希望在文档中看到的属性使用hidden隐藏
@ApiModelProperty(value = "逻辑删除 1已删除 0未删除",hidden = true)
private Boolean deleted;
//省略其他字段
}
4、配置接口的文档
控制器接口类
@RestController
//生成api接口的文档描述
@Api(description = "学员管理")
@RequestMapping("/ucenter/member")
public class MemberController {
@Autowired
private MemberService memberService;
//定义请求方法的名字和详细描述
@ApiOperation(value = "注册学员", notes = "updateTime,createTime无需添加,这是前台系统用户的注册功能,前提是用户已经接收了验证码")
@PostMapping
public boolean register(
//定义请求参数的文档描述 name的值是要描述的参数的名字
@ApiParam(name = "member", value = "学员对象", required = true)
@RequestBody Member member) {
boolean result = memberService.save(member);
return result;
}
//省略其他
}
5、访问文档
文档地址:localhost:8080/swagger-ui.html
二、接口前后台分离的配置
为什么要对接口进行前后台分离?因为前台和后台的功能有些相同,但有些差异,例如后台管理员可以删除用户,但前台是没有删除用户的功能的,将接口和文档分离更有利于管理维护。
1、接口分离
前台接口
@RestController
@Api(description = "前端学员管理")
@RequestMapping("/api/ucenter/member")
public class MemberController {
@Autowired
private MemberService memberService;
@ApiOperation(value = "注册学员", notes = "updateTime,createTime无需添加,这是前台系统用户的注册功能,前提是用户已经接收了验证码")
@PostMapping
public boolean register(
@ApiParam(name = "member", value = "学员对象", required = true)
@RequestBody Member member) {
boolean result = memberService.save(member);
return result;
}
}
后台接口放在同级下的admin包中
@RestController
@Api(description = "学员管理")
@RequestMapping("/admin/ucenter/member")
public class AdminMemberController {
@Autowired
private MemberService memberService;
@ApiOperation(value = "返回所有学员列表")
@GetMapping
public List<Member> list() {
return memberService.list(null);
}
@ApiOperation(value = "根据id删除学员")
@DeleteMapping(value = "{memberId}")
public boolean deleteById(@ApiParam(name = "memberId", value = "学员id", required = true)
@PathVariable Long memberId) {
boolean result = memberService.removeById(memberId);
return result;
}
@ApiOperation(value = "注册学员", notes = "updateTime,createTime无需添加,这是前台系统用户的注册功能,前提是用户已经接收了验证码")
@PostMapping
public boolean register(
@ApiParam(name = "member", value = "学员对象", required = true)
@RequestBody Member member) {
boolean result = memberService.save(member);
return result;
}
}
这样就有了同一个实体的不同的接口
2、对前后台接口进行分组配置
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
//前台api接口文档
public Docket webApiConfig() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("webApi")//组名
.apiInfo(webApiInfo())
.select()//创建ApiSelectorBuilder对象
.paths(Predicates.not(PathSelectors.regex("/admin/.*")))//过滤掉 admin 接口
.paths(Predicates.not(PathSelectors.regex("/error.*")))//过滤掉 error 接口
.build();
}
@Bean
//后台管理员api文档
public Docket adminApiConfig() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("adminApi")
.apiInfo(adminApiInfo())
.select()//创建ApiSelectorBuilder对象
.paths(Predicates.and(PathSelectors.regex("/admin/.*")))//只显示 admin 接口
.build();
}
private ApiInfo webApiInfo() {
return new ApiInfoBuilder()
.title("用户中心微服务前台网站API")
.description("此文档描述了用户中心前台网站的基本API接口")
.version("1.0")
.contact(new Contact("Jack", "http://www.jikedaquan.com", "jikedaquan@163.com"))
.build();
}
private ApiInfo adminApiInfo() {
return new ApiInfoBuilder()
.title("用户中心微服务后台管理系统的API")
.description("此文档描述了用户中心后台管理系统的基本API接口")
.version("1.0")
.contact(new Contact("Jack", "http://www.jikedaquan.com", "jikedaquan@163.com"))
.build();
}
}
如何让接口文档自动生成,SpringBoot中Swagger的使用的更多相关文章
- django接口文档自动生成
django-rest_framework接口文档自动生成 只针对用到序列化和返序列化 一般还是用第三方yipi 一.安装依赖 pip3 install coreapi 二.设置 setting.py ...
- djangorestframework接口文档自动生成
参考: https://blog.csdn.net/ros_donggua/article/details/81007814 pip install coreapi
- 给.Net Core添加Swagger实现接口文档自动生成
1.添加Nuget相关引用 Swashbuckle.AspNetCore
- springboot成神之——swagger文档自动生成工具
本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...
- Word 2010文档自动生成目录和某页插入页码
一.Word 2010文档自动生成目录 关于Word文档自动生成目录一直是我身边同学们最为难的地方,尤其是毕业论文,经常因为目录问题,被要求修改,而且每次修改完正文后,目录的内容和页码可能都会发生变化 ...
- VS文档自动生成
VS2008文档自动生成 (发现,Sandcastle主要是用于C#项目.里面的注释都是XML格式的.不太适合VC的.最终还是得用Doxygen) 一.Sandcastle简介: Sandcastle ...
- 接口文档管理工具-Postman、Swagger、RAP(转载)
接口文档管理工具-Postman.Swagger.RAP 转自:http://www.51testing.com/html/10/n-3715910.html 在项目开发测试中,接口文档是贯穿始终的. ...
- Api文档自动生成工具
java开发,根据代码自动生成api接口文档工具,支持RESTful风格,今天我们来学一下api-doc的生成 作者:互联网编程. 欢迎投稿,一起交流技术 https://www.jianshu.co ...
- java 文档自动生成的神器 idoc
写文档 作为一名开发者,每个人都要写代码. 工作中,几乎每一位开发者都要写文档. 因为工作是人和人的协作,产品要写需求文档,开发要写详细设计文档,接口文档. 可是,作为一个懒人,平时最讨厌的一件事情就 ...
随机推荐
- JavaScript指定周期来调用函数setTimeout和setInterval
setTimeout方法:setTimeout setInterval方法:setInterval
- RequestMapping中produces属性作用
注解RequestMapping中produces属性可以设置返回数据的类型以及编码,可以是json或者xml: @RequestMapping(value="/xxx",prod ...
- @noi.ac - 489@ shuffle
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 n 的序列 s1,s2,-,sn,它有 2^n− ...
- Angular项目目录结构
前言:不支持MakeDown的博客园调格式的话,真的写到快o(╥﹏╥)o了,所以老夫还是转战到CSDN吧,这边就不更新啦啦啦~ CSDN地址:https://blog.csdn.net/Night20 ...
- hdu 5734 Acperience(2016多校第二场)
Acperience Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- Java使用RandomAccessFile读写文件
目录 转载自:http://blog.csdn.net/akon_vm/article/details/7429245 Java RandomAccessFile RandomAccessFile是用 ...
- python开启GPU加速
看了好多教程都提到了使用 os.environ["CUDA_VISIBLE_DEVICES"] = "1" 或者export CUDA_VISIBLE_DEVI ...
- codedecision P1112 区间连续段 题解 线段树
题目描述:https://www.cnblogs.com/problems/p/P1112.html 题目链接:http://codedecision.com/problem/1112 线段树区间操作 ...
- springboot activiti工作流简单示例
最近一直研究springboot,根据工作需求,工作流需要作为一个单独的微服务工程来提供给其他服务调用,现在简单的写下工作流(使用的activiti)微服务的搭建与简单使用 jdk:1.8 数据库:m ...
- H3C Inverse ARP