在开发过程中,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的使用的更多相关文章

  1. django接口文档自动生成

    django-rest_framework接口文档自动生成 只针对用到序列化和返序列化 一般还是用第三方yipi 一.安装依赖 pip3 install coreapi 二.设置 setting.py ...

  2. djangorestframework接口文档自动生成

    参考: https://blog.csdn.net/ros_donggua/article/details/81007814 pip install coreapi

  3. 给.Net Core添加Swagger实现接口文档自动生成

    1.添加Nuget相关引用 Swashbuckle.AspNetCore

  4. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  5. Word 2010文档自动生成目录和某页插入页码

    一.Word 2010文档自动生成目录 关于Word文档自动生成目录一直是我身边同学们最为难的地方,尤其是毕业论文,经常因为目录问题,被要求修改,而且每次修改完正文后,目录的内容和页码可能都会发生变化 ...

  6. VS文档自动生成

    VS2008文档自动生成 (发现,Sandcastle主要是用于C#项目.里面的注释都是XML格式的.不太适合VC的.最终还是得用Doxygen) 一.Sandcastle简介: Sandcastle ...

  7. 接口文档管理工具-Postman、Swagger、RAP(转载)

    接口文档管理工具-Postman.Swagger.RAP 转自:http://www.51testing.com/html/10/n-3715910.html 在项目开发测试中,接口文档是贯穿始终的. ...

  8. Api文档自动生成工具

    java开发,根据代码自动生成api接口文档工具,支持RESTful风格,今天我们来学一下api-doc的生成 作者:互联网编程. 欢迎投稿,一起交流技术 https://www.jianshu.co ...

  9. java 文档自动生成的神器 idoc

    写文档 作为一名开发者,每个人都要写代码. 工作中,几乎每一位开发者都要写文档. 因为工作是人和人的协作,产品要写需求文档,开发要写详细设计文档,接口文档. 可是,作为一个懒人,平时最讨厌的一件事情就 ...

随机推荐

  1. @codeforces - 414E@ Mashmokh's Designed Problem

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一棵 n 个点的树,每个点的儿子是有序的. 现给定 m 次操 ...

  2. HZOJ 模板(ac)

    调了一天,恶心死我了……作者的题解水的一b…… 测试点1-6: 暴力修改查询即可,期望得分30. 测试点7-14: k=1e5,相当于没有限制,那么对于树上每个点建权值线段树,线段树合并即可. 期望的 ...

  3. 模板—Kruskal

    int getf(int x){return (f[x]==x)?x:f[x]=getf(f[x]);} void hb(int x,int y){x=getf(x),y=getf(y),f[y]=x ...

  4. CentOs7 使用iptables开启关闭端口

    介绍 iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分 iptables文件设置路径:命令:vim /etc/sysconfig/iptables-config 注 ...

  5. H3C 命令级别

  6. oracle函数 exp(y)

    [功能]返回e的y次幂(e为数学常量) [参数]y,数字型表达式 [返回]数字 [示例] select exp(3),exp(0),exp(-3) from dual; 返回:20.0855369,1 ...

  7. POJ 3159 Candies、

    题意:n个小孩,m个比较(给你两个孩子代号a,b.然后c意味着a比b最多只能少c个糖果),问1和n之间差距最大的糖果数量. 思路:这是一个差分约束思路 不懂得:传送门, 转化一下就是一个SPFA求最短 ...

  8. supersockets扩展服务器配置

    关键字: 扩展配置, 自定义配置, 自定义属性, GetChildConfig, 读取配置,子节点 当你使用 SuperSocket 实现 Socket 服务器的时候,不可避免的需要在配置文件中定义一 ...

  9. SQL 循环语句

    一.if语句 二.while语句 练习: 三.case when 四.练习 1. 2. 3. 4.

  10. torch.nn.LSTM()函数维度详解

    123456789101112lstm=nn.LSTM(input_size,                     hidden_size,                      num_la ...