首页 > 其他分享 >Swagger

Swagger

时间:2023-07-28 16:11:06浏览次数:27  
标签:springfox Swagger apiInfo org import swagger public

SWAGGER

学习的目标

  • 了解swagger的作用
  • 了解前面后端分离
  • 在springboot中集成swagger

swagger简介

前后端分离

vue + springboot

后端时代:

​ 前端只有静态页面;html==>后端

​ 模版引擎 jsp=>后端是主力

前后端分离时代

  • 后端 : 后端控制层,服务层,数据访问层[后端团队]
  • 前端 : 前端控制层,视图层[前端团队]
    • 伪造后端数据,json 已经存在,不需要后端就可以启动起来
  • 前后端如何交互?==>接口
  • 前后端相互独立,松耦合;
  • 前后端甚至可以部署在不同的服务器

产生一个问题:

  • 前端集成调用,前端人员和后端人员无法做到“及时协商,尽早解决” ,最终导致问题集中爆发;

解决方案

  • 首先制定schema[计划的提纲],实时更新最新的API,降低集成的风险;
  • 早些年:指定word计划文档;
  • 前后端分离
    • 前端测试后端接口:postman
    • 后端提供接口,需要实时更新的消息及改动

swagger

  • 号称世界上最流行的API框架
  • RestFul API 文档在线自动生成工具=>API文档与API定义同步更新
  • 直接运行,可以在线车市API接口
  • 支持多种语言:(java,PHP)

官网招摇文档 (swagger.io)

在项目中使用swagger 需要 springbox;

  • swagger2
  • swaggerUI

springBoot 集成Swagger

  1. 新建一个springBoot web项目

  2. 导入相关依赖

    
    <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>
    
    
  3. 编写一个helloworld 测试是否成功启动

  4. 配置swagger ==>config文件

    @Configuration
    @EnableSwagger2//启用Swagger2
    public class SwaggerConfig {
    
    }
    
    # 出现一个错误  无法启动项目
    # org.springframework.context.ApplicationContextException: Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
    # at ……
    # Caused by: java.lang.NullPointerException: null
    # at ……
    # … 14 common frames omitted
    
    # 错误原因:SpringBoot2.6.x使用PathPatternMatcher匹配路径,Swagger引用的Springfox基于AntPathMatcher匹配路径。匹配方式不同,导致错误。
    
    # 解决思路:将SpringBoot的匹配路径方式更改为AntPathMatcher,两者相同即可。添加配置信息如下:
    
    spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER
    

    可见的网站 Swagger UI

Swagger 配置扫描接口

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                // 是否启动swagger
                .enable(true)
                .select()
                // RequestHandlerSelectors
                // basePackage指定要扫描的包
                // none()不扫描
                // any()全部扫描
                // withClassAnnotation() 扫描类上的注解
                // withMethodAnnotation()   扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.lmq.controller"))
                //过滤
//                .paths(PathSelectors.ant("/lmq/**"))
                .build();

配置API文件分组

配置groupname

package com.lmq.config;

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

import java.util.ArrayList;


/**
 * @author 羡鱼
 * @version 1.0
 * @date 2023/7/26 17:22
 */
@Configuration  // 配置到spring配置里面
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket docker2(Environment environment) {
        // 设置要显示的swagger 环境
        Profiles dev = Profiles.of("dev", "test");
        // 获取项目环境  判断是否处于自己设定的环境当中
        boolean b = environment.acceptsProfiles(dev);
        return new Docket(DocumentationType.SWAGGER_2).groupName("docker2")
                .apiInfo(apiInfo())
                .enable(b);
    }

    @Bean
    public Docket docker3(Environment environment) {
        // 设置要显示的swagger 环境
        Profiles dev = Profiles.of("dev", "test");
        // 获取项目环境  判断是否处于自己设定的环境当中
        boolean b = environment.acceptsProfiles(dev);
        return new Docket(DocumentationType.SWAGGER_2).groupName("docker3")
                .apiInfo(apiInfo())
                .enable(b);
    }

    @Bean
    public Docket docker(Environment environment) {
        // 设置要显示的swagger 环境
        Profiles dev = Profiles.of("dev", "test");
        // 获取项目环境  判断是否处于自己设定的环境当中
        boolean b = environment.acceptsProfiles(dev);

        return new Docket(DocumentationType.SWAGGER_2).groupName("lmq")
                .apiInfo(apiInfo())
                // 是否启动swagger
                .enable(b)

                .select()
                // RequestHandlerSelectors
                // basePackage指定要扫描的包
                // none()不扫描
                // any()全部扫描
                // withClassAnnotation() 扫描类上的注解
                // withMethodAnnotation()   扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.lmq.controller"))
                //过滤
//                .paths(PathSelectors.ant("/lmq/**"))
                .build();
    }

    // 配置swagger 信息=apiInfo
//    @ConfigurationProperties(prefix = "api-info")
    private ApiInfo apiInfo() {
        // 作者信息
        Contact DEFAULT_CONTACT = new Contact("羡鱼", "http://xn--4t0ay40d.fun/", "[email protected]");

        return new ApiInfo("羡鱼的文档"
                , "学习 学习 学习"
                , "v1.0"
                , "http://xn--4t0ay40d.fun/"
                , DEFAULT_CONTACT
                , "Apache 2.0"
                , "http://www.apache.org/licenses/LICENSE-2.0"
                , new ArrayList<>());
    }

}

实体类

package com.lmq.pojo;

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

/**
 * @author 羡鱼
 * @version 1.0
 * @date 2023/7/26 18:57
 */
//@Api("用户实体类")
@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户名")
    public String username;
    @ApiModelProperty("密码")
    public String pwd;

    public User(String username, String pwd) {
        this.username = username;
        this.pwd = pwd;
    }
}

可以在网页测试接口,几乎部分大公司都有使用

注意在正式发布的时候关闭!!!! 安全考虑 节省内存

标签:springfox,Swagger,apiInfo,org,import,swagger,public
From: https://www.cnblogs.com/lmq886/p/17587919.html

相关文章

  • java swagger 设置token
    实现JavaSwagger设置Token的步骤为了实现JavaSwagger的Token设置,我们需要按照以下步骤进行操作:步骤描述步骤1导入所需的依赖库步骤2配置SwaggerSecurity步骤3实现自定义的Token验证过滤器步骤4将Token验证过滤器应用到Swagger上接下来,我们将逐步详......
  • swagger文档请求参数为文件属性添加选择文件按钮
    在编写接口时,将所有参数封装到实体中,其中就包含MultipartFile类型的参数eg:参数实体:User@ApiModel(value="用户实体类")@DatapublicclassUser{@ApiModelProperty(value="用户名")publicStringuserName;@ApiModelProperty(value="密码")public......
  • Spring Boot 集成 Swagger 在线接口文档
    今天看了SpringBoot集成Swagger在线接口文档有关的很多东西,简单总结下我学习到的,以供之后复习参考。学习目标:在学习过程中,主要掌握在SpringBoot中如何导入Swagger工具来展现项目中的接口文档。1.Swagger简介1.1 Swagger解决的问题    随着互联网技术的发展......
  • .NET 6 swagger 隐藏接口
    如何实现".NET6Swagger隐藏接口"概述在.NET6中,Swagger是一个流行的API文档和测试工具,它可以帮助开发者快速了解和测试API接口。有时候我们可能会希望隐藏一些敏感接口或者不需要公开的接口,以达到安全性和简洁性的目的。本文将介绍如何在.NET6中使用Swagger隐藏......
  • 如何使用 Swagger 和 ReDoc 制作 ASP.NET Core API 文档 (.NET 6)
    使用Swagger和ReDoc的API文档当您开发WebAPI时,其他开发人员能够了解他们在与您的API交谈时必须发布、放置、删除或获取的内容非常重要。当开发人员完成编码后,为他们构建良好的文档可能具有挑战性。由于有了Swagger(称为OpenAPI),您现在可以在编码时使用Swagger轻松......
  • go-zero插件goctl-swagger的坑——第二弹
    截至本文发布,直接安装goctl-swagger还无法解决go-zero.api文件引入问题该文主要是记录在使用过程中遇到的问题和解决思路,不做详细教学使用。问题在go-zero插件goctl-swagger的坑的基础上,本文带来新的问题。也就是在开头说到的go-zero的.api文件相互引用问题。在最新的go-zer......
  • swagger文档和 knife4j 文档
    老版本的swagger-bootstrap-ui,可以显示非RestController,可以测试html页面显示,可以和springfox-swagger-ui配合显示<!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><vers......
  • Swagger扩展版本控制
    1、在程序里面建立一个ApiVersions.cs文件,用来设置版本publicenumApiVersions{///<summary>///版本一///</summary>V1,///<summary>///版本二///</summary>V2,///<......
  • Springboot 整合Swagger Swagger使用教程
    swagger使用教程——快速使用swagger一、swagger简介官网:https://swagger.io/1、认识swaggerswagger是一个规范和完整的框架,用于生成、描述、调用和可视化RestFul风格的web服务,总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务......
  • Swagger和日志
    Swagger官网:https://swagger.io/Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。功能主要包含以下几点:A.使得前后端分离开发更加方便,有利于团队协作B.接口文档在线自动生成,降低后端开发人员编写接口文档的负担C.接口功能测试......