Spring-Boot-2-x使用Swagger2构建API文档及跳坑(二)

开始项目

首先,我们需要一个带有一些Rest Controller的Spring Boot应用程序,我使用了SpringFox 2.9.2和Spring Boot 2.1.12.RELEASE。

添加Swagger2依赖

在pom.xml中加入Swagger2的依赖

创建Swagger2配置类

在项目的配置包下面创建Swagger2的配置类Swagger2Config

配置信息如下

如上代码所示,通过**@Configuration注解,让Spring来加载该类配置**。

  • @ EnableSwagger2支持Swagger 2的SpringFox支持。

  • DocumentationType.SWAGGER_2告诉Docketbean我们正在使用Swagger规范的版本2。

  • **apiInfo()**用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。

  • select()创建一个构建器,用于定义哪些控制器及其生成的文档中应包含哪些方法。

  • apis()定义要包含的类(控制器和模型类)。这里我们包括所有这些,但您可以通过基础包,类注释等来限制它们。

SpringFox会将其检测为文档生成源。Controller和Model类。您可以在Docket配置中轻松配置它。我们可以使用.apis(RequestHandlerSelectors.any()来包含所有类;当然我们也可以缩小到我们的基础包

  • paths()允许您根据路径映射定义应包含哪个控制器的方法。我们现在包括所有这些,但您可以使用正则表达式等限制它。上面的代码.paths(PathSelectors.any())是代表匹配所有URL。

有时我们还需要只包含特定的URL路径。可能正在使用API的多个版本以实现向后兼容,但不希望包含历史版本。也许API的某些部分是内部的,不应该是公共文档的一部分。无论哪种方式,也可以在Docket中配置基于URL匹配的这种包含。如

  1. .paths(PathSelectors.ant("/v2/**"))

将其限制为某些正则表达式或Ant样式的路径模式,而不是匹配所有路径的任何路径。

将Swagger Core注释添加到模型类中

我们可以在实体类上面进行注释

类级别使用@ApiModel注释字段级别@ApiModelProperty@ApiModelProperty的示例对于提供示例值非常有用,这不仅适用于用户的指导,而且还可以在使用Swagger UI作为REST客户端来测试服务时预填充请求有效负载。Position属性很方便指定属性在文档中显示的顺序。首先提供重要或必需的属性或属于一起的组属性是有用的。否则,属性将按字母顺序列出。

将Swagger Core注释添加到控制器类

与使用Swagger核心注释注释模型类以提供其他元数据相同,您可以注释控制器及其方法和方法参数。

  • @Api描述了整个控制器

  • @ApiOperation用于方法级别的描述

  • @ApiParam用于方法参数

  • @ApiImplicitParams、@ApiImplicitParam注解来给参数增加说明

配置到这里,基本的配置就结束了。那是不是就可以执行启动。

404坑一

我们在启动后,请求http://localhost:8081/swagger-ui.html 直接报404错误;这个问题是因为我们的项目是纯的restful前后端分离的项目,我们在application.yml中配置了。

  1. spring.mvc.resources.add-mapping:false

将其注释掉熟悉的界面又回来了,这个配置是不自动给静态资源添加路径,导致swagger-ui.html找不到资源。怎么解决呢?修改一下Swagger2Config

上面的代码就是人为的把资源做一下映射关系。

源码Bug坑二

细心的小伙伴在运行时,应用控制台打印时,会时不时的报异常,如下:

  1. java.lang.NumberFormatException: For input string: "",出错的原因呢是因为 空字符串""无法转成Number。

我们找到Swagger包下抛出异常的类:

这个异常就是因为上面源码上面的判断条件有问题,如果example属性不配置的话,在属性是Integer类型时Long.valueOf(example)时就会报异常,解决方法:

io.springfox:springfox-swagger2:2.9.2中依赖了swagger-models的1.5.20版本,我们可以排除springfox-swagger2中的swagger-models依赖,导入io.swagger:swagger-models的1.5.21版本即可

静态资源404坑三

到现在为止,如果应用是一个纯粹的 REST Api 接口服务,那就基本没什么问题,但如果应用中仍然有视图模板、静态资源时,可能就会出现加载不到静态资源了。如果出现这个问题,那只要在Swagger配置类 SwaggerConfig 中加上静态资源路径映射即可:

  1. //路径根据自己的项目去做映射

  2. registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");

下面介绍企业项目中比较实用的用法

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
链图片转存中…(img-E7WEtIwL-1713304782212)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值