轉載:SpringBoot非官方教程 | 第十一篇:springboot整合swagger2,構建優雅的Restful API
阿新 • • 發佈:2018-12-14
swagger,中文“拽”的意思。它是一個功能強大的api框架,它的整合非常簡單,不僅提供了線上文件的查閱,而且還提供了線上文件的測試。另外swagger很容易構建restful風格的api,簡單優雅帥氣,正如它的名字。
一、引入依賴
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
二、寫配置類
@Configuration @EnableSwagger2 public class Swagger2 { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.forezp.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("springboot利用swagger構建api文件") .description("簡單優雅的restfun風格,http://blog.csdn.net/forezp") .termsOfServiceUrl("http://blog.csdn.net/forezp") .version("1.0") .build(); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
通過@Configuration註解,表明它是一個配置類,@EnableSwagger2開啟swagger2。apiINfo()配置一些基本的資訊。apis()指定掃描的包會生成文件。
三、寫生產文件的註解
swagger通過註解表明該介面會生成文件,包括介面名、請求方法、引數、返回資訊的等等。
- @Api:修飾整個類,描述Controller的作用
- @ApiOperation:描述一個類的一個方法,或者說一個介面
- @ApiParam:單個引數描述
- @ApiModel:用物件來接收引數
- @ApiProperty:用物件接收引數時,描述物件的一個欄位
- @ApiResponse:HTTP響應其中1個描述
- @ApiResponses:HTTP響應整體描述
- @ApiIgnore:使用該註解忽略這個API
- @ApiError :發生錯誤返回的資訊
- @ApiParamImplicitL:一個請求引數
- @ApiParamsImplicit 多個請求引數
現在通過一個栗子來說明:
package com.forezp.controller;
import com.forezp.entity.Book;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.*;
/**
* 使用者建立某本圖書 POST /books/
* 使用者修改對某本圖書 PUT /books/:id/
* 使用者刪除對某本圖書 DELETE /books/:id/
* 使用者獲取所有的圖書 GET /books
* 使用者獲取某一圖書 GET /Books/:id
* Created by fangzhipeng on 2017/4/17.
* 官方文件:http://swagger.io/docs/specification/api-host-and-base-path/
*/
@RestController
@RequestMapping(value = "/books")
public class BookContrller {
Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, Book>());
@ApiOperation(value="獲取圖書列表", notes="獲取圖書列表")
@RequestMapping(value={""}, method= RequestMethod.GET)
public List<Book> getBook() {
List<Book> book = new ArrayList<>(books.values());
return book;
}
@ApiOperation(value="建立圖書", notes="建立圖書")
@ApiImplicitParam(name = "book", value = "圖書詳細實體", required = true, dataType = "Book")
@RequestMapping(value="", method=RequestMethod.POST)
public String postBook(@RequestBody Book book) {
books.put(book.getId(), book);
return "success";
}
@ApiOperation(value="獲圖書細資訊", notes="根據url的id來獲取詳細資訊")
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path")
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public Book getBook(@PathVariable Long id) {
return books.get(id);
}
@ApiOperation(value="更新資訊", notes="根據url的id來指定更新圖書資訊")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "圖書ID", required = true, dataType = "Long",paramType = "path"),
@ApiImplicitParam(name = "book", value = "圖書實體book", required = true, dataType = "Book")
})
@RequestMapping(value="/{id}", method= RequestMethod.PUT)
public String putUser(@PathVariable Long id, @RequestBody Book book) {
Book book1 = books.get(id);
book1.setName(book.getName());
book1.setPrice(book.getPrice());
books.put(id, book1);
return "success";
}
@ApiOperation(value="刪除圖書", notes="根據url的id來指定刪除圖書")
@ApiImplicitParam(name = "id", value = "圖書ID", required = true, dataType = "Long",paramType = "path")
@RequestMapping(value="/{id}", method=RequestMethod.DELETE)
public String deleteUser(@PathVariable Long id) {
books.remove(id);
return "success";
}
@ApiIgnore//使用該註解忽略這個API
@RequestMapping(value = "/hi", method = RequestMethod.GET)
public String jsonTest() {
return " hi you!";
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
通過相關注解,就可以讓swagger2生成相應的文件。如果你不需要某介面生成文件,只需要在加@ApiIgnore註解即可。需要說明的是,如果請求引數在url上,@ApiImplicitParam 上加paramType = “path” 。
整個整合過程非常簡單,但是我看了相關的資料,swagger沒有做安全方面的防護,可能需要我們自己做相關的工作。