1. 程式人生 > 實用技巧 >work_26_swagger2整合springBoot和使用

work_26_swagger2整合springBoot和使用

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:用在屬性上,描述響應類的屬性