小徐带你实现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);
    }

}

项目工程结构图:

小徐带你实现SpringBoot整合Swagger开发_第1张图片
小徐带你实现SpringBoot整合Swagger开发_第2张图片

实现的效果图:

小徐带你实现SpringBoot整合Swagger开发_第3张图片
小徐带你实现SpringBoot整合Swagger开发_第4张图片
小徐带你实现SpringBoot整合Swagger开发_第5张图片

Swagger总结:

一:我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
二:接口文档实时更新
三:可以在线测试
	Swagger是一个优秀的工具,几乎所有的大公司都有使用它。
	注意点:在正式发布的时候,关闭Swagger!!!出于安全考虑,而且节省运行内存。

本项目源码可以联系博主来取噢:QQ:1462638689

你可能感兴趣的:(springboot,spring,spring,boot,web)