【Swagger3】SpringBoot项目集成Swagger3-程序员宅基地

技术标签: java  SpringBoot  

资料:

  • swagger 官网:swagger.io
  • springfox 官网:springfox
  • springfox Github 仓库:springfox / springfox
  • springfox-demos Github 仓库:springfox / springfox-demos
  • springfox Maven 仓库:Home » io.springfox

SpringFox 3.0.0 发布:

官方说明:

  • SpringFox 3.0.0 发布了,SpringFox 的前身是 swagger-springmvc,是一个开源的 API doc 框架,可以将 Controller 的方法以文档的形式展现。
  • 首先,非常感谢社区让我有动力参与这个项目。在这个版本中,在代码、注释、bug报告方面有一些非常惊人的贡献,看到人们在问题论坛上跳槽来解决问题,我感到很谦卑。它确实激励我克服“困难”,开始认真地工作。有什么更好的办法来摆脱科维德的忧郁!
  • 注意:这是一个突破性的变更版本,我们已经尽可能地保持与springfox早期版本的向后兼容性。在2.9之前被弃用的api已经被积极地删除,并且标记了将在不久的将来消失的新api。所以请注意这些,并报告任何遗漏的内容。

此版本的亮点:

  • Spring5,Webflux支持(仅支持请求映射,尚不支持功能端点)。
  • Spring Integration支持(非常感谢反馈)。
  • SpringBoot支持springfox Boot starter依赖性(零配置、自动配置支持)。
  • 具有自动完成功能的文档化配置属性。
  • 更好的规范兼容性与2.0。
  • 支持OpenApi 3.0.3。
  • 零依赖。几乎只需要spring-plugin,swagger-core ,现有的swagger2注释将继续工作并丰富openapi3.0规范。

兼容性说明:

  • 需要Java 8
  • 需要Spring5.x(未在早期版本中测试)
  • 需要SpringBoot 2.2+(未在早期版本中测试)

注意:

应用主类增加注解@EnableOpenApi,删除之前版本的SwaggerConfig.java。

启动项目,访问地址:http://localhost:8080/swagger-ui/index.html
注意2.x版本中访问的地址的为http://localhost:8080/swagger-ui.html


整合使用

Maven项目中引入springfox-boot-starter依赖:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

application.yml配置

spring:
	application:
		name: springfox-swagger
server:
	port: 8080

# ===== 自定义swagger配置 ===== #
swagger:
	enable: true
	application-name: ${
    spring.application.name}
	application-version: 1.0
	application-description: springfox swagger 3.0整合Demo
	try-host: http://localhost:${
    server.port}

使用@EnableOpenApi注解,启用swagger配置

@EnableOpenApi
@Configuration
public class SwaggerConfiguration {
    

}

自定义swagger配置类SwaggerProperties

@Data
@Component
@ConfigurationProperties("swagger")
public class SwaggerProperties {
    
    /**
     * 是否开启swagger,生产环境一般关闭,所以这里定义一个变量
     */
    private Boolean enable;

    /**
     * 项目应用名
     */
    private String applicationName;

    /**
     * 项目版本信息
     */
    private String applicationVersion;

    /**
     * 项目描述信息
     */
    private String applicationDescription;

    /**
     * 接口调试地址
     */
    private String tryHost;
}

一个完整详细的springfox swagger配置示例:

@EnableOpenApi
@Configuration
public class SwaggerConfiguration implements WebMvcConfigurer {
    
    private final SwaggerProperties swaggerProperties;

    public SwaggerConfiguration(SwaggerProperties swaggerProperties) {
    
        this.swaggerProperties = swaggerProperties;
    }

    @Bean
    public Docket createRestApi() {
    
        return new Docket(DocumentationType.OAS_30).pathMapping("/")

                // 定义是否开启swagger,false为关闭,可以通过变量控制
                .enable(swaggerProperties.getEnable())

                // 将api的元信息设置为包含在json ResourceListing响应中。
                .apiInfo(apiInfo())

                // 接口调试地址
                .host(swaggerProperties.getTryHost())

                // 选择哪些接口作为swagger的doc发布
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()

                // 支持的通讯协议集合
                .protocols(newHashSet("https", "http"))

                // 授权信息设置,必要的header token等认证信息
                .securitySchemes(securitySchemes())

                // 授权信息全局应用
                .securityContexts(securityContexts());
    }

    /**
     * API 页面上半部分展示信息
     */
    private ApiInfo apiInfo() {
    
        return new ApiInfoBuilder().title(swaggerProperties.getApplicationName() + " Api Doc")
                .description(swaggerProperties.getApplicationDescription())
                .contact(new Contact("lighter", null, "[email protected]"))
                .version("Application Version: " + swaggerProperties.getApplicationVersion() + ", Spring Boot Version: " + SpringBootVersion.getVersion())
                .build();
    }

    /**
     * 设置授权信息
     */
    private List<SecurityScheme> securitySchemes() {
    
        ApiKey apiKey = new ApiKey("BASE_TOKEN", "token", In.HEADER.toValue());
        return Collections.singletonList(apiKey);
    }

    /**
     * 授权信息全局应用
     */
    private List<SecurityContext> securityContexts() {
    
        return Collections.singletonList(
                SecurityContext.builder()
                        .securityReferences(Collections.singletonList(new SecurityReference("BASE_TOKEN", new AuthorizationScope[]{
    new AuthorizationScope("global", "")})))
                        .build()
        );
    }

    @SafeVarargs
    private final <T> Set<T> newHashSet(T... ts) {
    
        if (ts.length > 0) {
    
            return new LinkedHashSet<>(Arrays.asList(ts));
        }
        return null;
    }

    /**
     * 通用拦截器排除swagger设置,所有拦截器都会自动加swagger相关的资源排除信息
     */
    @SuppressWarnings("unchecked")
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
        try {
    
            Field registrationsField = FieldUtils.getField(InterceptorRegistry.class, "registrations", true);
            List<InterceptorRegistration> registrations = (List<InterceptorRegistration>) ReflectionUtils.getField(registrationsField, registry);
            if (registrations != null) {
    
                for (InterceptorRegistration interceptorRegistration : registrations) {
    
                    interceptorRegistration
                            .excludePathPatterns("/swagger**/**")
                            .excludePathPatterns("/webjars/**")
                            .excludePathPatterns("/v3/**")
                            .excludePathPatterns("/doc.html");
                }
            }
        } catch (Exception e) {
    
            e.printStackTrace();
        }
    }

}

一些常用注解说明

  • @Api:用在controller类,描述API接口
  • @ApiOperation:描述接口方法
  • @ApiModel:描述对象
  • @ApiModelProperty:描述对象属性
  • @ApiImplicitParams:描述接口参数
  • @ApiResponses:描述接口响应
  • @ApiIgnore:忽略接口方法

示例:

项目Demo:springfox-swagger
在这里插入图片描述

参考
在 Spring Boot 项目中使用 Swagger 文档
Springfox 3.0.0(包含springfox-swagger2-3.0.0)即OpenAPI 3的发布与系统集成

笔记为复制方便自用 笔记原地址

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lixin_nobody/article/details/110234674

智能推荐

Jenkins介绍和安装及配合GitLab代码自动部署_jkens安装gitlab-程序员宅基地

文章浏览阅读572次。 Jenkins介绍和安装及配合GitLab代码自动部署https://www.cnblogs.com/xiewenming/p/7490828.html 一,安装docker-ce版本1.1 删除之前版本的Dockersudo yum remove docker docker-common docker-selinux docker-engine1.2 安装一些依赖..._jkens安装gitlab

试题8 算法训练 P0103(从键盘输入一个大写字母,要求改用小写字母输出。)_从键盘输入一个大写字母,要求改用小写字母输出,fun函数-程序员宅基地

文章浏览阅读1.8k次。题目:从键盘输入一个大写字母,要求改用小写字母输出。输入  A输出  a分析思路:主要考虑ASII码值的相互转化a: 对应ASII值为:97A: 对应ASII值为:65大小写之间相差32方法1代码:#include <iostream>#include <algorithm>using namespace std;const int n=2;int main(){char A[n];cin>>A;char B[n];_从键盘输入一个大写字母,要求改用小写字母输出,fun函数

NVIDIA JETSON XAVIER NX 安装tensorflow_jetson agx xavier安装h5py-程序员宅基地

文章浏览阅读3.7k次。一 拿到板子,查看jetpack版本head -n 1 /etc/nv_tegra_release二 安装anaconda替代品,miniforge提示:个人感觉miniforge用起来和anaconda没什么区别NVIDIA Jetson Xavier使用的aarch64架构是没法使用anaconda的,虽然可以自己编译,但是conda指令是没法编译到aarch64架构上运行的。不过有替代品,名字是miniforge。miniforge与miniconda的区..._jetson agx xavier安装h5py

UWB什么要对工厂园区进行精准定位_uwb融合差分定位技术 厂区边界-程序员宅基地

文章浏览阅读460次。工业改革以来,国家一直致力于工业制造的不断发展,所以不管是“工业4.0”还是“智能制造2025”都是智慧工厂实现高效生产、传统转型的目标,为了更好的完成传统工业向智能化工业的迈进,UWB无论是从定位精度、安全性、抗干扰、功耗等多种技术来分析,无疑是目前最理想的智慧工厂人员定位技术之一。UWB定位面临哪些企业管理难点1.企业安全信息管理由于企业性质,考虑到员工生产安全、商业保密和工作效率,解决员工进入工作区域因禁止携带手机导致的调度及通信难题;2.企业人员、车辆来往管控难点对于大型企业几百甚至几千_uwb融合差分定位技术 厂区边界

md0和md1linux软raid,软RAID管理命令mdadm详解-程序员宅基地

文章浏览阅读2.8k次。mdadm是linux下用于创建和管理软件RAID的命令,是一个模式化命令。但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的自身缺陷(不能用作启动分区、使用CPU实现,降低CPU利用率),因此在生产环境下并不适用。但为了学习和了解RAID原理和管理,因此仍然进行一个详细的讲解:一、创建模式选项:-C专用选项:-l 级别-n 设备个数-a {yes|no} ..._md1482.x叫0

解决csv文件打开是乱码的问题_csv文件输入是乱码-程序员宅基地

文章浏览阅读4w次,点赞20次,收藏35次。将数据库的数据导出为CSV文件,之后用excel打开,出现了乱码情况,真心无奈,感觉都要理转文了!╮(╯﹏╰)╭原因:CSV是用UTF-8编码的,而EXCEL是ANSI编码,由于编码方式不一致导致出现乱码。解决办法:用记事本打开CSV文件-----&gt;文件------&gt;另存为------&gt;点编码------&gt;选择ANSI-----&gt;保存,然后用excel打开就不会..._csv文件输入是乱码

随便推点

bzoj3016 [Usaco2012 Nov]Clumsy Cows_[usaco2012 nov]笨牛-程序员宅基地

文章浏览阅读708次。DescriptionBessie the cow is trying to type a balanced string of parentheses into her new laptop, but she is sufficiently clumsy (due to her large hooves) that she keeps mis-typing characters. P_[usaco2012 nov]笨牛

2024年气候变化、旅游景观与经济发展国际会议(ICTLED 2024)-程序员宅基地

文章浏览阅读665次,点赞15次,收藏17次。向ICTLED 2024提交的所有全文都可以用英语书写,并将发送给至少两名评审员,并根据原创性、技术或研究内容或深度、正确性、与会议的相关性、贡献和可读性进行评估。ICTLED 2024所有被接受的论文将在会议记录中发表,并提交给Scopus、EI Compendex、CPCI、CNKI、Google Scholar进行索引。的科研学者、技术人员及相关人员提供一个共享科研成果和前沿技术,了解学术发展趋势,拓宽研究思路,加强学术研究和探讨,促进学术成果产业化合作的平台。拒稿),越早投稿越早收到文章结果。

使用mqtt协议 硬件对接_mqtt怎么对接硬件-程序员宅基地

文章浏览阅读5k次。Shaocheng.LiToggle main menu visibility首页关于MQTT 协议和 mosquitto2015-08-11 Network 12792MQTT 介绍Mosquitto安全性3.1. SSL/TLS3.2. WebSockets with SSL/TLSlibmosquitto 库4.1. 获取库版本4.2. 初始化和清除4.3..._mqtt怎么对接硬件

店盈通:拼多多一个店铺推几个产品最好_拼多多一户能做几个产品吗?-程序员宅基地

文章浏览阅读1.5k次。  在拼多多店铺上面上架商品,那肯定也需要了解到底维持多少的数量合适。那么拼多多店铺商品数量多少合适?越多越好吗?下面店盈通给大家讲述一下。  1、输入账号名,点击保存,选择已配置的店铺,或者在开始页面配置店铺。  2、输入商品地址,可以同时输入不同的拼多多商品地址。  3、填写需要填写的相关信息。  4、选中要上传的商品,点击上传商品。如果有传错了可以点击删除商品。  5、上传成功后,您可以在上传的页面中找到您上传的商品,或者您可以点击删除商品选项,选择要删除的商品。  ._拼多多一户能做几个产品吗?

curl断点续传杂记-程序员宅基地

文章浏览阅读1.3k次。为了解决 HTTP/1.0 存在的资源浪费的问题, HTTP/1.1 优化为默认长连接模式。_curl断点续传

apk开发学习!目前最全的《Android面试题及解析》!深度好文_apk分析的试题-程序员宅基地

文章浏览阅读102次。何为成长?成长是指自我提升,一方面是本身的个人能力,另一方面是社会对你的认可度。最终,程序员的职位和薪水都能在成长中得以体现。很多人对成长有误解,在他们眼中,随着工作年限的提高,成长是理所当然的事情,这其实是一个误区。两个程序员同时工作3年,难道他们两个的成长就完全一样吗?其实是不一样的。很多岗位在招聘的时候都要求3年以上工作经验,这个3年工作经验是指持续成长的三年,而不是指浑浑噩噩混日子的三年。下面举个通俗易懂的例子,大家一定能理解。面试经历1.偶然看到知乎的内推帖,投了个简历,下午hr姐姐ca._apk分析的试题

推荐文章

热门文章

相关标签