work_26_swagger2整合springBoot和使用
阿新 • • 發佈:2020-09-11
1.為了解決於前端開發人員與後端開發人員對WebAPI介面的溝通問題,引出了Swagger2 ,它可以動態生成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>
2.啟動類添加註解
@EnableSwagger2
@SpringBootApplication
3.swaggerConfig
package com.goldshell.config; import java.util.ArrayList; import java.util.Collections; import java.util.List;import com.goldshell.shiro.vo.DefContants; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI; import io.swagger.annotations.ApiOperation; import springfox.documentation.service.ApiKey; import springfox.documentation.service.Parameter; import lombok.extern.slf4j.Slf4j; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.SecurityScheme; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * @Author scott */ @Slf4j @Configuration @EnableSwagger2 @EnableSwaggerBootstrapUI public class Swagger2Config implements WebMvcConfigurer { /** * * 顯示swagger-ui.html文件展示頁,還必須注入swagger資源: * * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } /** * swagger2的配置檔案,這裡可以配置swagger2的一些基本的內容,比如掃描的包等等 * * @return Docket */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //此包路徑下的類,才生成介面文件 .apis(RequestHandlerSelectors.basePackage("com.goldshell")) //加了ApiOperation註解的類,才生成介面文件 .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) .paths(PathSelectors.any()) .build() .securitySchemes(Collections.singletonList(securityScheme())); //.globalOperationParameters(setHeaderToken()); } /*** * oauth2配置 * 需要增加swagger授權回撥地址 * http://localhost:8888/webjars/springfox-swagger-ui/o2c.html * @return */ @Bean SecurityScheme securityScheme() { return new ApiKey(DefContants.X_ACCESS_TOKEN, DefContants.X_ACCESS_TOKEN, "header"); } /** * JWT token * @return */ private List<Parameter> setHeaderToken() { ParameterBuilder tokenPar = new ParameterBuilder(); List<Parameter> pars = new ArrayList<>(); tokenPar.name(DefContants.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); pars.add(tokenPar.build()); return pars; } /** * api文件的詳細資訊函式,注意這裡的註解引用的是哪個 * * @return */ private ApiInfo apiInfo() { return new ApiInfoBuilder() // //大標題 .title("Jeecg-Boot 後臺服務API介面文件") // 版本號 .version("1.0") // .termsOfServiceUrl("NO terms of service") // 描述 .description("後臺API介面") // 作者 .contact("JEECG團隊") .license("The Apache License, Version 2.0") .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html") .build(); } }
4.訪問Swagger2
訪問介面文件:localhost:埠號/專案名/swagger-ui.html
5.註解說明
@Api:用在請求的類上,表示對類的說明@Api(tags="APP使用者註冊Controller")
tags="說明該類的作用,可以在UI介面上看到的註解" value="該引數沒什麼意義,在UI介面上也看到,所以不需要配置" @ApiOperation:用在請求的方法上,說明方法的用途、作用
@ApiOperation(value="使用者註冊",notes="手機號、密碼都是必輸項,年齡隨邊填,但必須是數字")
value="說明方法的用途、作用" notes="方法的備註說明" @ApiImplicitParams:用在請求的方法上,表示一組引數說明
@ApiImplicitParams({ @ApiImplicitParam(name="mobile",value="手機號",required=true,paramType="form"), @ApiImplicitParam(name="password",value="密碼",required=true,paramType="form"), @ApiImplicitParam(name="age",value="年齡",required=true,paramType="form",dataType="Integer") })
@ApiImplicitParam:用在@ApiImplicitParams註解中,指定一個請求引數的各個方面 name:引數名 value:引數的漢字說明、解釋 required:引數是否必須傳 paramType:引數放在哪個地方 · header --> 請求引數的獲取:@RequestHeader · query --> 請求引數的獲取:@RequestParam · path(用於restful介面)--> 請求引數的獲取:@PathVariable · body(不常用) · form(不常用) dataType:引數型別,預設String,其它值dataType="Integer" defaultValue:引數的預設值 @ApiResponses:用在請求的方法上,表示一組響應 @ApiResponse:用在@ApiResponses中,一般用於表達一個錯誤的響應資訊 code:數字,例如400 message:資訊,例如"請求引數沒填好" response:丟擲異常的類 @ApiModel:用於響應類上,表示一個返回響應資料的資訊 (這種一般用在post建立的時候,使用@RequestBody這樣的場景, 請求引數無法使用@ApiImplicitParam註解進行描述的時候) @ApiModelProperty:用在屬性上,描述響應類的屬性