SpringBoot整合Swagger
阿新 • • 發佈:2018-12-21
最近專案與前端對接時開始接觸Swagger。
Swagger:一個規範和完整的框架,用於生成、描述、呼叫和視覺化 RESTful 風格的 Web 服務。總體目標是使客戶端和檔案系統作為伺服器以同樣的速度來更新。檔案的方法,引數和模型緊密整合到伺服器端的程式碼,允許API來始終保持同步。
用法:
一、新增依賴包
<!--pom.xml檔案--> <!--swagger2--> <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>
二、新增配置類 :Swagger2Config
package com.cdqyzj.admin.system.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /* * Swagger2配置類 * 在與spring boot整合時,放在與Application.java同級的目錄下。 * 通過@Configuration註解,讓Spring來載入該類配置。 * 再通過@EnableSwagger2註解來啟用Swagger2。 */ @EnableSwagger2 @Configuration public class Swagger2Config { /** * 建立API應用 * apiInfo() 增加API相關資訊 * 通過select()函式返回一個ApiSelectorBuilder例項,用來控制哪些介面暴露給Swagger來展現, * 本例採用指定掃描的包路徑來定義指定要建立API的目錄。 * @return */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() // .apis(RequestHandlerSelectors.basePackage("com.swaggerTest.controller")) //為當前包路徑 .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } /** * 建立該API的基本資訊(這些基本資訊會展現在文件頁面中) * 訪問地址:http://專案實際地址/swagger-ui.html * @return */ private ApiInfo apiInfo() { return new ApiInfoBuilder() //頁面標題 .title("Spring Boot中使用Swagger2構建RESTful APIs") // // .termsOfServiceUrl("http://www.baidu.com") //建立人 .contact("我啥時候寫了這玩意兒啊?9月29日我都還不知道Swagger2是個啥玩意兒") //版本號 .version("1.0") //描述 .description("API 描述") .build(); } }
三、在介面處添加註解
//附加稅 @Controller @RequestMapping("/addTax") @Api(value = "AddtaxController|一個關於附加稅的控制器") public class AddtaxController { public final String prefix = "WeChat_Files/backstage_Files/manage_AddTax"; @Autowired private AddtaxService addtaxService; @Autowired private UCompanyService ucomService; ... @ResponseBody @RequestMapping(value="/list_user/{userId}/{year}/{taxType}",method=RequestMethod.GET) @ApiOperation(value="根據使用者ID、具體年份和稅務型別獲取具體附加稅資訊", notes="test: 稅務型別包括:季報 月報") @ApiImplicitParams({ @ApiImplicitParam(paramType="query", name = "userId", value = "使用者ID", required = true, dataType = "Integer"), @ApiImplicitParam(paramType="query", name = "year", value = "稅務時間", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "taxType", value = "稅務型別", required = true, dataType = "String") }) public PageUtil list_user(@PathVariable("userId")int userId,@PathVariable("year")int year,@PathVariable("taxType")String taxType){ System.err.println("按使用者查全部:userId:"+userId+"\tyear:"+year+"\t taxType:"+taxType); List<Addtax> rows; PageUtil page = new PageUtil(); ... 具體解決方法 ... page.setRows(rows); page.setTotal(total); return page; }
五、Swagger使用的註解及其說明
@Api:用在類上,說明該類的作用。
@ApiOperation:註解來給API增加方法說明。
@ApiImplicitParams : 用在方法上包含一組引數說明。
@ApiImplicitParam:用來註解來給方法入參增加說明。
@ApiResponses:用於表示一組響應
@ApiResponse:用在@ApiResponses中,一般用於表達一個錯誤的響應資訊
l code:數字,例如400
l message:資訊,例如"請求引數沒填好"
l response:丟擲異常的類
@ApiModel:描述一個Model的資訊(一般用在請求引數無法使用@ApiImplicitParam註解進行描述的時候)
l @ApiModelProperty:描述一個model的屬性