1. 程式人生 > >Swagger2整合springBoot,自動生成API介面文件

Swagger2整合springBoot,自動生成API介面文件

Swagger2整合springBoot

首先匯入jar包

  <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox<
/groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency>

注意:我一開始匯入的是2.7.0jar包,訪問swagger頁面,圖片載入不出來。後面找了半天沒找到原因,應該是jar包裡面的靜態資源損壞了,索性換了2.8.0就好了

新建config

@Configuration
@EnableSwagger2
public class SwaggerConfiguration
extends WebMvcConfigurationSupport { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //為當前包路徑 .apis(RequestHandlerSelectors.basePackage("com.mochu.ferp.erp.controller"
)) .paths(PathSelectors.any()) .build(); } //構建 api文件的詳細資訊函式,注意這裡的註解引用的是哪個 private ApiInfo apiInfo() { return new ApiInfoBuilder() //頁面標題 .title("ERP介面文件說明") //建立人 .contact(new Contact("吳彥祖","","[email protected]")) //版本號 .version("1.0") //描述 .description("聯絡人") .build(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); super.addResourceHandlers(registry); } }

注意 :很多人就是沒有新增靜態資源對映,重寫WebMvcConfigurationSupport 類的addResourceHandlers 方法,指定靜態資源的位置。

啟動專案,訪問Swagger2頁面

開始 :訪問 http://localhost:8080/swagger-ui.html ,埠號即為自己專案的埠

config的 apiInfo 方法對介面上內容進行設定,這些沒多大用,大家知道就好。

給類加上註解,實現自動生成API

常用註解:

  • @Api()用於類;
    表示標識這個類是swagger的資源
  • @ApiOperation()用於方法;
    表示一個http請求的操作
  • @ApiParam()用於方法,引數,欄位說明;
    表示對引數的新增元資料(說明或是否必填等)
  • @ApiModel()用於類
    表示對類進行說明,用於引數用實體類接收
  • @ApiModelProperty()用於方法,欄位
    表示對model屬性的說明或者資料操作更改
  • @ApiIgnore()用於類,方法,方法引數
    表示這個方法或者類被忽略
  • @ApiImplicitParam() 用於方法
    表示單獨的請求引數
  • @ApiImplicitParams() 用於方法,包含多個 @ApiImplicitParam

@ApiImplicitParam 的 paramType屬性註解解釋

屬性 取值 作用
paramType 對應請求引數型別
path 以地址的形式提交資料
query 直接跟引數完成自動對映賦值
body 引數在請求體裡面
form 以form表單的形式提交 僅支援POST
header 引數在request headers 裡邊提交
//控制層上註解
@RestController
@RequestMapping("/archives")
@Api(tags="檔案管理類")
public class ArchivesController {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @GetMapping("/abc")
    @ApiOperation(value="獲取訂單", notes="提交一組識別的標籤id,返回生成的訂單詳情")
    public ResultVO get(@ApiParam(name="id",value="優惠券物件") @RequestParam(name = "id") String id){
       return ResultVOUtil.success();
   }

    @PostMapping("/edf")
    @ApiOperation(value="修改訂單", notes="提交一組識別的標籤id,返回生成的訂單詳情")
    public ResultVO post(@ApiParam(name="coupon",value="優惠券物件") @RequestBody Coupon coupon){
       return ResultVOUtil.success(coupon);
    }

    @ApiImplicitParams({
            @ApiImplicitParam(name="name",value="使用者名稱",dataType="string", paramType = "query",example="xingguo"),
            @ApiImplicitParam(name="id",value="使用者id",dataType="long", paramType = "query")})
    @PostMapping("/hig")
    public ResultVO post(@ApiParam(hidden = true)@RequestBody Order order){
        return ResultVOUtil.success(order);
   }
}


//模型表上註解
@Data  //lombok外掛的註解,自動生成get,set方法
@ApiModel(value="ResultVO",description = "http請求返回的最外層物件")
public class ResultVO<T> {

    /** 錯誤碼. */
    @ApiModelProperty(value="返回碼",name="code")
    private Integer code;

    /** 提示資訊. */
    @ApiModelProperty(value="提示資訊",name="msg")
    private String msg;

    /** 具體內容. */
    @ApiModelProperty(value="具體內容",name="data")
    private T data;
}





頁面顯示
在這裡插入圖片描述

注意 :如果方法採用@RequesMapping 註解必須指定方法型別,GET,POST等,否則出現多條API記錄。

在這裡插入圖片描述

這是swagger自動生成的API文件,點選try it out 可以模擬請求,類似postman功能。

在這裡插入圖片描述

自動API生成就這樣子了。可以把路徑給前端,讓前端自己閱讀了,省下我們編寫API的時間。哈哈