小徐帶你實現SpringBoot整合Swagger開發

Swagger簡介

學習目標:

瞭解Swagger的作用和概念

瞭解前後端分離

在SpringBoot中集成Swagger

前後端分離
	Vue+SpringBoot

後端時代:前端只用管理靜態頁面;html======》後端,模板引擎JSP===>後端是主力

前後端分離時代:

後端:後端控制層,服務層,數據訪問層【後端團隊】

前端:前端控制層,視圖層  【前端團隊】

僞造後端數據,json已經存在了,不需要後端,前端工程依舊能夠跑起來。

前後端如何交互?====》API

前後端相對獨立,松耦合

前後端甚至可以部署在不同的服務器上

產生一個問題:
前後端集成聯調,前端人員和後端人員無法做到"即使協商,儘早解決”,最終導致問題集中爆發。

解決方案:
	首先指定schema計劃的提綱,實時更新最新的API,降低集成的風險。

早些年:指定word計劃文檔。

前後端分離:
	前端測試後端接口:postman
	後端提供接口,需要實時更新最新的消息及改動。
	
 Swagger:號稱世界上最流行的API框架
 RestFul	API文檔在線自動生成工具===>API文檔與API定義同步更新。
 直接運行,可以在線測試API接口;	
 支持多種語言

在項目中使用Swagger需要SpringBox

	swagger2
	 ui

SpringBoot集成Swagger開發

第一步:新建一個SoringBoot web項目

	在我之前的博客中提到使用idea創建SpringBoot  web項目的詳細步驟可以查看。

第二步導入jar包

 <!--swagger相關依賴-->
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

第三步:編寫一個hello word程序

package com.swagger.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * package_name:com.swagger.demo.controller
 *
 * @author:徐亞遠 Date:2020/6/14 10:40
 * 項目名:swagger01
 * Description:TODO
 * Version: 1.0
 **/
@RestController
public class HelloController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "hello World";
    }
}

第四步:配置Swagger

package com.swagger.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;


/**
 * package_name:com.swagger.demo.config
 *
 * @author:徐亞遠 Date:2020/6/14 12:10
 * 項目名:swagger01
 * Description:TODO
 * Version: 1.0
 **/
@Configuration
@EnableSwagger2 //開啓swagger2註解
public class SwaggerConfig {
    //如何配置多個分組
    @Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");

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

    }
    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("C");

    }

    //配置swagger的docker的bean實例
    @Bean
    public Docket docket(Environment environment) {

        //設置要顯示swagger的環境
        Profiles profiles = Profiles.of("dev","test");
        // 通過 environment.acceptsProfiles(profiles) 判斷是否處在自己設置的環境
        Boolean flag =   environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                // 配置是否啓用swagger ,爲false swagger不能在瀏覽器中使用
                .enable(flag)
                .groupName("亞遠")
                .select()
                //RequestHandlerSelectors 配置要掃描接口的方式
                //basePackage() 指定要掃描的包  推薦使用此種方式
                //any() 掃描全部
                //none  都不掃描
                //withClassAnnotation()  掃描類上的註解
                //withMethodAnnotation() 掃描方法上的註解
                .apis(RequestHandlerSelectors.basePackage("com.swagger.demo"))
                //paths() 過濾什麼路徑
                //.paths(PathSelectors.ant("/hello"))
                .build()
                ;
    }

    //配置swagger的ApiInfo信息
    public ApiInfo apiInfo() {
        //作者信息
        Contact contact = new Contact("徐亞遠", "http://www.aliwo.cn", "[email protected]");
        return new ApiInfo(
                "Swagger 學習",
                "Swagger標籤的服務學習",
                "1.0",
                "https://blog.csdn.net/weixin_43311650",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }

}

我只希望我的swagger在生產環境中使用,在發佈時不適用

判斷是不是生產環境 flag = false

注入bean (flag)

@Bean
public Docket docket(Environment environment) {

    //設置要顯示swagger的環境
    Profiles profiles = Profiles.of("dev","test");
    // 通過 environment.acceptsProfiles(profiles) 判斷是否處在自己設置的環境
    Boolean flag =   environment.acceptsProfiles(profiles);

配置API文檔的分組

.groupName("亞遠")

如何配置API文檔的多個分組

//如何配置多個分組
@Bean
public Docket docket1(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("A");

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

}
@Bean
public Docket docket3(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("C");

}

實體類配置

package com.swagger.demo.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * package_name:com.swagger.demo.entity
 *
 * @author:徐亞遠 Date:2020/6/14 15:22
 * 項目名:swagger01
 * Description:TODO
 * Version: 1.0
 **/
@ApiModel("用戶實體類")
public class User {
    @ApiModelProperty("用戶名")
    /** 用戶名*/
    private String username;
    @ApiModelProperty("密碼")
    /** 密碼*/
    private String password;

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

application.properties文件

#配置開發環境
spring.profiles.active=dev
server.port=8080
server.servlet.context-path=/

application-dev.properties文件

server.port=8081
server.servlet.context-path=/

application-pro.properties文件

server.port=8082
server.servlet.context-path=/

主啓動類

package com.swagger.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SwaggerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SwaggerApplication.class, args);
    }

}

項目工程結構圖:

在這裏插入圖片描述
在這裏插入圖片描述

實現的效果圖:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Swagger總結:

一:我們可以通過Swagger給一些比較難理解的屬性或者接口,增加註釋信息
二:接口文檔實時更新
三:可以在線測試
	Swagger是一個優秀的工具,幾乎所有的大公司都有使用它。
	注意點:在正式發佈的時候,關閉Swagger!!!出於安全考慮,而且節省運行內存。

本項目源碼可以聯繫博主來取噢:QQ:1462638689

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章