(06)使用Swagger自動生成html文件,描述API介面
阿新 • • 發佈:2020-05-30
使用前後端分離,API文件必不可少,一旦程式碼變動,就要維護文件,很繁瑣。Swagger根據程式碼自動實時生成文件,解決了這個問題。
1、演示Swagger使用過程
1)需要新增依賴
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
2)啟動類添加註解@EnableSwagger2
@SpringBootApplication @EnableSwagger2 public class App { public static void main(String[] args) { SpringApplication.run(App.class,args); } }
3)新增測試類
@RestController @RequestMapping("/user") public class UserController { @GetMapping publicList<User> query(User user){ List<User> users = new ArrayList<User>(); users.add(new User("1","張三","123456",new Date())); users.add(new User("2","李四","123422",new Date())); users.add(new User("3","王五","252153",new Date())); return users; } @GetMapping(value="/{id}") public User getUserInfo(@PathVariable("id") String id){ User user=new User(); user.setUsername("tom"); return user; } @PostMapping public User create(@RequestBody User user){ return new User("1",new Date()); } @PutMapping("/{id:\\d+}") public User update(@RequestBody User user){ return new User("1",new Date()); } @DeleteMapping("/{id:\\d+}") public void delete(@PathVariable String id){ System.out.println("id :"+id); } }
public class User { private String id; private String username; private String password; private Date birthDay; public User() {} public User(String id,String username,String password,Date birthDay) { this.id=id; this.username=username; this.password=password; this.birthDay=birthDay; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getBirthDay() { return birthDay; } public void setBirthDay(Date birthDay) { this.birthDay = birthDay; } }
2、檢視效果
1)啟動服務,輸入http://localhost/swagger-ui.html,顯示如下,其中Basic Error Controller是Spring容器自帶的。
2)展開User Controller,可以看到定義的請求方式、url、方法名(預設顯示java中的方法名)
3)展開一個方法,可以看到請求引數,並且可以執行Try it out真實的請求一次java方法,看返回什麼。
3、三個常用註解
1)註解說明
@EnableSwagger2:加在啟動類上,表示使用wagger
@ApiOperation:加在方法上,顯示自定義的方法名,如:@ApiOperation(value="查詢使用者列表")
@ApiParam:加在方法的引數前面,描述引數,如:@ApiParam("使用者ID")
@ApiModelProperty:加在類的欄位上,描述引數,如:@ApiModelProperty(value="使用者名稱")
2)演示註解
@RestController @RequestMapping("/user") public class UserController { @GetMapping @ApiOperation(value="查詢使用者列表") public List<User> query(User user){ List<User> users = new ArrayList<User>(); users.add(new User("1",new Date())); return users; } @GetMapping(value="/{id}") @ApiOperation(value="根據ID查詢使用者") public User getUserInfo(@ApiParam("使用者ID") @PathVariable("id") String id){ User user=new User(); user.setUsername("tom"); return user; } @PostMapping @ApiOperation(value="建立使用者") public User create(@RequestBody User user){ return new User("1",new Date()); } @PutMapping("/{id:\\d+}") @ApiOperation(value="修改使用者") public User update(@RequestBody User user){ return new User("1",new Date()); } @DeleteMapping("/{id:\\d+}") @ApiOperation(value="刪除使用者") public void delete(@PathVariable String id){ System.out.println("id :"+id); } }
public class User { @ApiModelProperty(value="使用者Id") private String id; @ApiModelProperty(value="使用者名稱") private String username; @ApiModelProperty(value="使用者密碼") private String password; @ApiModelProperty(value="出生日期") private Date birthDay; public User() {} public User(String id,Date birthDay) { this.id=id; this.username=username; this.password=password; this.birthDay=birthDay; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getBirthDay() { return birthDay; } public void setBirthDay(Date birthDay) { this.birthDay = birthDay; } }
3)效果如下: