1. 程式人生 > 其它 >springboot 整合Swagger 3.0.0

springboot 整合Swagger 3.0.0

技術標籤:springboot

SpringBoot整合Swagger

1. 新建springboot專案,新增web依賴

2.匯入依賴

注意:springfox3.0 訪問SwaggerUI用http://localhost:8081/swagger-ui/http://localhost:8081/swagger-ui/index.html

	 <!-- 包含springfox-swagger2和springfox-swagger-ui3的依賴 -->
	<dependency>
            <groupId>io.springfox</groupId
>
<artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>

3.編寫HelloController並測試

@RestController
public class HelloController {

    @GetMapping(value = "/hello")
    public String hello(){
        return "hello"
; } }

4.編寫配置類SwaggerConfig來配置 Swagger


@Configuration
@EnableOpenApi
public class SwaggerConfig {

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                //  定義是否開啟swagger,false為關閉,可以通過變數控制,預設為true
                .
enable(false) .select() //RequestHandlerSelectors 配置要掃描介面的方式 .apis(RequestHandlerSelectors.basePackage("com.wang.controller")) //paths() 過濾什麼路徑 .paths(PathSelectors.ant("/wang/**")) .build(); } private ApiInfo apiInfo(){ //作者資訊 Contact contact = new Contact("小滿", "", ""); return new ApiInfo( "小滿的 Swagger Api Documentation", "你要快快長大哦", "1.0", "urn:tos", contact, "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList()); } }

面試題:我只希望我的swagger在生產環境用,在開發環境不用

思路:判斷是不是生產環境

    Profiles profiles = Profiles.of("dev","test");
    boolean flag = environment.acceptsProfiles(profiles);
@Configuration
@EnableOpenApi
public class SwaggerConfig {

    @Bean
    //注意導這個包的 import org.springframework.core.env.Environment;
    public Docket docket(Environment environment){

        Profiles profiles = Profiles.of("dev","test");
        boolean flag = environment.acceptsProfiles(profiles);
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                //  定義是否開啟swagger,false為關閉,可以通過變數控制,預設為true
                .enable(flag)
                .select()
                //RequestHandlerSelectors 配置要掃描介面的方式
                .apis(RequestHandlerSelectors.basePackage("com.wang.controller"))
                //paths() 過濾什麼路徑
                .paths(PathSelectors.ant("/wang/**"))
                .build();
    }

    private ApiInfo apiInfo(){

        //作者資訊
        Contact contact = new Contact("小滿", "", "");
        return new ApiInfo(
                "小滿的 Swagger Api Documentation",
                "你要快快長大哦",
                "1.0",
                "urn:tos",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }
}

配置API文件分組

.groupName("小滿")

如何配置多個分組

多個Docket即可,協作開發

 	@Bean
    public Docket docket1(){
        return new Docket(DocumentationType.OAS_30).groupName("A");
    }
    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.OAS_30).groupName("B");
    }

實體配置

  1. 新建實體類
@ApiModel("使用者")
public class User {

    //如果屬性是private就不會暴露出來
    @ApiModelProperty("使用者名稱")
    public String username;
    @ApiModelProperty("密碼")
    public String password;
}

  1. 只要這個實體在請求介面的返回值上(即使是泛型),都能對映到實體項中:
   //只要這個實體在請求介面的返回值上(即使是泛型),都能對映到實體項中:
    @PostMapping(value = "/user")
    public User user(){
        return new User();
    }
  1. 效果
    在這裡插入圖片描述

注意:關於@ApiModelProperty標籤的坑,今天莫名遇到了這個,不過改了下把username改為userName再改回來又好了

@ApiModel為類添加註釋

@ApiModelProperty為類屬性添加註釋

總結

  • 我們可以通過swagger給一些難以理解的屬性介面加註解資訊
  • 介面文件實時更新
  • 可以線上測試

注意點:出於安全考慮,在正式釋出時要關閉Swagger