您现在的位置是:首页 > 文章详情

如何让接口文档自动生成,SpringBoot中Swagger的使用

日期:2019-06-19点击:386

在开发过程中,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(); } }
原文链接:https://yq.aliyun.com/articles/706050
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章