Swagger使用导入配置

Swagger

  • 了解Swagger的概念及作用

  • 了解前后端分离

  • 在springboot中集成swagger

  • Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新

  • 直接运行,在线测试API

  • 支持多种语言 (如:Java,PHP等)

  • 官网:https://swagger.io/

SpringBoot集成Swagger

SpringBoot集成Swagger => springfox,两个jar包

1 SpringBoot集成Swagger

  • 新建一个SpringBoot + Web项目

  • 导入相关依赖

    <!--swagger 相关依赖-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>3.0.0</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>3.0.0</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-boot-starter</artifactId>
                <version>3.0.0</version>
            </dependency>
    
  • 编写一个工程

  • 配置Swagger==》config

    @Configuration
    @EnableOpenApi //开启swagger2
    public class SwaggerConfig {
    
    }
    
  • 测试运行

    地址:Swagger UI

  • 配置Swagger

    Swagger的bean实例Docket;

    //配置Swagger的Docket的bean实例
        //enable(false)是否启动Swagger,如果为false,则不能在浏览器中访问
        @Bean
        public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(true)
                    .select()
                    //RequestHandlerSelectors,配置要扫描接口的方式
                    //basePackage:指定要扫描的包
                    //any():扫描全部包
                    //none 都不扫描
                    //withClassAnnotation:扫描类上的方法
                    //withMethodAnnotation:扫描方法上的注解
                    .apis(RequestHandlerSelectors.basePackage("com.smile.controller"))
                   // .paths(PathSelectors.ant(("/smile/**")))    //过滤扫描路径
                    .build();
        }
    
  • 通过不同环境开启swagger

    //设置要显示的Swagger环境
        Profiles profiles = Profiles.of("dev");
        //通过enviroment.acceptsProfiles判断是否处在自己设定的环境中
        boolean flag = environment.acceptsProfiles(profiles); //通过此处判断
    
    
    
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(flag)
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage:指定要扫描的包
                //any():扫描全部包
                //none 都不扫描
                //withClassAnnotation:扫描类上的方法
                //withMethodAnnotation:扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.smile.controller"))
               // .paths(PathSelectors.ant(("/smile/**")))    //过滤扫描路径
                .build();
    }
    

2 分组及接口注释小结

.groupName("贾富荣")

如何配置多个分组:多个Docket实例即可

@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");
}

给生成的文档加注释:

@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户名")
    private String username;
    @ApiModelProperty("密码")
    private String password;

部分:

package com.smile.controller;

import com.smile.pojo.User;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//ApiOperation接口
@ApiOperation("Hello控制类接口注释")
@RestController
public class HelloController {

    //ApiOperation接口,不是放在类上的,是方法
    @ApiOperation("hello控制类")
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }

    //只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger中
    @PostMapping("/user")
    public User user(){
        return new User("贾富荣","111111");
    }

    @ApiOperation("Post测试")
    @PostMapping("/postt")
    public User postt(@ApiParam("用户名:")User user){
        return user;
    }
}

项目使用搭建代码:

Swagger2

​ Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTFUL风格的Web服务

  1. 生成在线接口文档
  2. 方便接口测试
1.导入swaager依赖
<!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <scope>provided </scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <scope>provided </scope>
        </dependency>
2.创建配置类
package com.smile.servicebase;

import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
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;

/**
 * @author jia
 * @date 2022/8/14
 * @description swagger配置文件
 */

@Configuration
@EnableSwagger2 //swagger注解
public class SwaggerConfig {
    /**
     * swagger插件
     * @return
     */
    @Bean
    public Docket webApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")  //随意命名
                .apiInfo(webApiInfo())
                .select()
                //如果包含admin和error就不先显示
                .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build();
    }
    //文档信息设置
    private ApiInfo webApiInfo(){
        return new ApiInfoBuilder()
                .title("网站-课程中心API文档")
                .description("本文档描述了课程中心微服务接口定义")
                .version("1.0")
                .contact(new Contact("Helen", "http://atguigu.com",
                        "2413249299@qq.com"))
                .build();
    }
}
3.在主启动类中添加注解,设置包扫描规则
 *   注意在common中,如果在其他地方使用会涉及没启用可能,需要使用@ComponentScan(basePackages = {"com.smile"})
 *
 */

@SpringBootApplication
@ComponentScan(basePackages = {"com.smile"})  //会扫描所有这个路径下的类,包含父类中的这个路径
public class EduApplication {
    public static void main(String[] args) {
        SpringApplication.run(EduApplication.class,args);
    }
}
4.访问swagger
http://localhost:8001/swagger-ui.html
5.Controller层代码
@Api(description = "讲师管理")  //controller提示信息
@RestController
@RequestMapping("/eduservice/edu-teacher")
public class EduTeacherController {

    @Autowired
    private EduTeacherService eduTeacherService;

    //查询讲师表中的所有数据 restful风格
    @ApiOperation(value = "所有讲师列表") //单个接口提示信息
    @GetMapping("findAll")
    public List<EduTeacher> findAllTeacher(){
        //调用service方法,实现查询所有的操作
        List<EduTeacher> list = eduTeacherService.list(null);
        return list;
    }

    //逻辑删除讲师的方法
    @ApiOperation(value = "逻辑删除讲师")
    @DeleteMapping("{id}")  //id需要通过路径进行传递 so 下面的参数值   delete不能使用浏览器直接进行测试,swagger测试
    //参数值信息@ApiParam(value = "讲师ID",name = "id",required = true)
    public boolean removeTeacher(@ApiParam(value = "讲师ID",name = "id",required = true)@PathVariable String id){
        boolean flag = eduTeacherService.removeById(id);
        return flag;
    }

}
6.结果

在这里插入图片描述