开始项目
首先,我们需要一个带有一些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匹配的这种包含。如
.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中配置了。
spring.mvc.resources.add-mapping:false
将其注释掉熟悉的界面又回来了,这个配置是不自动给静态资源添加路径,导致swagger-ui.html找不到资源。怎么解决呢?修改一下Swagger2Config
上面的代码就是人为的把资源做一下映射关系。
源码Bug坑二
细心的小伙伴在运行时,应用控制台打印时,会时不时的报异常,如下:
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 中加上静态资源路径映射即可:
-
//路径根据自己的项目去做映射
-
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
下面介绍企业项目中比较实用的用法
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
完结
Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。
Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
链图片转存中…(img-E7WEtIwL-1713304782212)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!