如何让接口文档自动生成,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(); } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
同学,要不要来挑战双11零点流量洪峰?
阿里妹导读:双十一的零点,整个电商系统的请求速率到达峰值。如果将这些请求流量只分配给少部分 server,这些机器接收到的请求速率会远超过处理速率,新来的任务来不及处理,就会产生请求任务堆积。 今年的中间件性能挑战赛就围绕“挑战双11零点流量洪峰”展开。自2015年开始,中间件性能挑战赛已经成功举办了四届,被历年大赛选手称为“中间件技术的风向标”。接下来,跟随阿里巴巴中间件团队的郭浩,一起来围观赛题,解读赛题。 在现代分布式应用中,服务请求是由物理机或虚拟机组成的 server 池进行处理的。 通常,server 池规模巨大且服务容量各不相同,受网络、内存、CPU、下游服务等各种因素影响,一个 server 的服务容量始终处于动态变动和趋于稳定的状态,如何设计和实现这种系统的负载均衡算法是一个极具挑战的难题。 自适应负载均衡的需求背景 负
- 下一篇
微服务开源生态报告 No.1
从关注开源,到使用开源,再到参与开源贡献,越来越多的国内开发者通过开源技术来构建业务。 截止目前,Arthas / Dubbo / ChaosBalde / Nacos / RocketMQ / Seata / Sentinel / Spring Cloud Alibaba / Tengine 等微服务领域的开源项目在 GitHub 上已获得近 8w 的 star,contributor 数量达738位,以一种社区协作的方式,来提升项目的生产效率和分发效率。 这里面,大家既是项目的开发者,也是项目的使用者,作为项目的需求方一同参与到项目的迭代过程中,使得项目能以更快的响应速度来满足实际需求,快速迭代出「好」的产品,这似乎是其他协作方式难以达到的。 通常,我们都会通过在 GitHub 上订阅邮件列表,来了解社区动态。这一次,我们联合以上各
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- MySQL8.0.19开启GTID主从同步CentOS8
- Hadoop3单机部署,实现最简伪集群
- Docker安装Oracle12C,快速搭建Oracle学习环境