在开发过程中,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. Helm V3 新版本发布

    Helm v3.0.0 Alpha 1 is coming! Helm 作为 Kubernetes 体系的包管理工具,已经逐渐成为了事实上的应用分发标准.根据 2018 年 CNCF 的一项云原生用户 ...

  2. Project Euler Problem 15-Lattice paths

    组合数,2n中选n个.向右走有n步,向下走有n步.共2n步.有n步是向右走的,计算向右走的这n步的所有情况,即C(2n,n). 或者,每一步,只能从右边或者上边走过来,只有这两种情况,即step[i] ...

  3. PageHelper实现分页查询

    PageHelper是基于拦截器实现的myBatis分页插件 PageHelper的Github主页 : https://github.com/pagehelper/Mybatis-PageHelpe ...

  4. poj 1514 Metal Cutting (dfs+多边形切割)

    1514 -- Metal Cutting 一道类似于半平面交的题. 题意相当简单,给出一块矩形以及最后被切出来的的多边形各个顶点的位置.每次切割必须从一端切到另一端,问切出多边形最少要切多长的距离. ...

  5. H3C 面向连接和无连接的服务

  6. 在eclipse中建立lua开发环境

    1. 给你的eclipse安装LuaEclipse,新增Eclipse Software Update Site“http://luaeclipse.luaforge.net/update-site ...

  7. Yarn install 报错 Resolving packages... [2/4] Fetching packages... info There appears to be trouble with your network connection. Retrying

    1.设置淘宝代理 yarn config set registry 'https://registry.npm.taobao.org' 2.如果网址本地可以打开,说明你本地有代理设置 所以需要按本地的 ...

  8. springmvc单Redis实例实现分布式锁(解决锁超时问题)

    一.前言 关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题 ...

  9. 【t002】jam的计数法

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世 ...

  10. HTML5中Js多线程编程

    Web Worker Web Worker是HTML5提出的新标准,为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行.在主线程运行的同时,Work ...