目錄html
在開發過程當中,java後端須要與客戶端進行交互,須要將後端的接口及參數寫成文檔給調用者查閱。一個問題也有此而生,需求改動頻繁,接口設計也會隨之改動,文檔修改的不及時會帶來很大的問題。前端
Swagger是一個自動生成文檔的工具,能夠在線查閱文檔,減小了開發人員的負擔,下面咱們就來看看如何在SpringBoot中使用Swagger。java
<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>
Swagger2Config.javaweb
@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(); } }
實體類Memberspring
//對實體名生成文檔描述 @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; //省略其餘字段 }
控制器接口類後端
@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; } //省略其餘 }
文檔地址:localhost:8080/swagger-ui.htmlapi
爲何要對接口進行先後臺分離?由於前臺和後臺的功能有些相同,但有些差別,例如後臺管理員能夠刪除用戶,但前臺是沒有刪除用戶的功能的,將接口和文檔分離更有利於管理維護。springboot
前臺接口app
@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; } }
這樣就有了同一個實體的不一樣的接口
@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(); } }