久违了,升级一波 swagger starter!

简介: 久违了,升级一波 swagger starter!

这个swagger的starter已经存在四年了,记得当时做这个的时候主要是由于swagger官方并没有提供类似spring boot官方其他starter模块一样的封装。当我们要用swagger的时候,还是要写很多Java配置来启动,所以就做了这个,尽可能的把原来要写在Java中的配置都转移到配置文件中来。

一个小小的封装,也获得了2k+的Star,使用也超过了3.1k。

image.png

之前由于springfox 3.0推出了starter(之前我也写了篇博客介绍使用SpringFox 3生成Swagger文档),想着既然有了这个,那就没有花太多精力去继续更新了。

但是,一直有收到用过springfox starter的小伙伴反应还是希望可以用纯配置的方式来使用swagger,希望这个swagger可以继续升级到最新的版本。所以,下面会继续跟进这个starter,这里要特别感谢andi.lin(https://github.com/llin6025)的积极参与,得以让这次的升级继续进行。

仓库地址https://github.com/SpringForAll/spring-boot-starter-swagger

更新内容

  • 升级依赖的springfox swagger到3.0.0
  • 文档的开启关闭控制改为springfox.documentation.enabled参数

如何使用

在该项目的帮助下,我们的Spring Boot可以轻松的引入swagger。只需要做下面两个步骤:

  • pom.xml中引入依赖:

<dependency>
  <groupId>com.spring4all</groupId>
  <artifactId>swagger-spring-boot-starter</artifactId>
  <version>2.0.0.RELEASE</version>
</dependency>

**注意

  1. 1.6.0开始,我们按Spring Boot官方建议修改了artifactId为swagger-spring-boot-starter,1.6.0之前的版本不做修改,依然为使用spring-boot-starter-swagger !**
  2. 2.0.0开始,不再需要手工添加@EnableSwagger2Doc来启动Swagger配置

默认情况下就能产生所有当前Spring MVC加载的请求映射文档。

参数配置

更细致的配置内容参考如下:

springfox.documentation.enabled=true
swagger.title=spring-boot-starter-swagger
swagger.description=Starter for swagger 2.x
swagger.version=1.4.0.RELEASE
swagger.license=Apache License, Version 2.0
swagger.licenseUrl=https://www.apache.org/licenses/LICENSE-2.0.html
swagger.termsOfServiceUrl=https://github.com/dyc87112/spring-boot-starter-swagger
swagger.contact.name=didi
swagger.contact.url=http://blog.didispace.com
swagger.contact.email=dyc87112@qq.com
swagger.base-package=com.didispace
swagger.base-path=/**
swagger.exclude-path=/error, /ops/**
swagger.globalOperationParameters[0].name=name one
swagger.globalOperationParameters[0].description=some description one
swagger.globalOperationParameters[0].modelRef=string
swagger.globalOperationParameters[0].parameterType=header
swagger.globalOperationParameters[0].required=true
swagger.globalOperationParameters[1].name=name two
swagger.globalOperationParameters[1].description=some description two
swagger.globalOperationParameters[1].modelRef=string
swagger.globalOperationParameters[1].parameterType=body
swagger.globalOperationParameters[1].required=false
// 取消使用默认预定义的响应消息,并使用自定义响应消息
swagger.apply-default-response-messages=false
swagger.global-response-message.get[0].code=401
swagger.global-response-message.get[0].message=401get
swagger.global-response-message.get[1].code=500
swagger.global-response-message.get[1].message=500get
swagger.global-response-message.get[1].modelRef=ERROR
swagger.global-response-message.post[0].code=500
swagger.global-response-message.post[0].message=500post
swagger.global-response-message.post[0].modelRef=ERROR

配置说明

默认配置

springfox.documentation.enabled=是否启用swagger,默认:true
swagger.title=标题
swagger.description=描述
swagger.version=版本
swagger.license=许可证
swagger.licenseUrl=许可证URL
swagger.termsOfServiceUrl=服务条款URL
swagger.contact.name=维护人
swagger.contact.url=维护人URL
swagger.contact.email=维护人email
swagger.base-package=swagger扫描的基础包,默认:全扫描
swagger.base-path=需要处理的基础URL规则,默认:/**
swagger.exclude-path=需要排除的URL规则,默认:空
swagger.host=文档的host信息,默认:空
swagger.globalOperationParameters[0].name=参数名
swagger.globalOperationParameters[0].description=描述信息
swagger.globalOperationParameters[0].modelRef=指定参数类型
swagger.globalOperationParameters[0].parameterType=指定参数存放位置,可选header,query,path,body.form
swagger.globalOperationParameters[0].required=指定参数是否必传,true,false

1.3.0.RELEASE新增:swagger.host属性,同时也支持指定docket的配置

1.4.0.RELEASE新增:

  • swagger.enabled:用于开关swagger的配置
  • swagger.globalOperationParameters:用于设置全局的参数,比如:header部分的accessToken等。该参数支持指定docket的配置。

2.0.0.RELEASE调整:

  • 原来的swagger.enabled配置修改为springfox.documentation.enabled来控制

Path规则说明

swagger.base-pathswagger.exclude-path使用ANT规则配置。

我们可以使用swagger.base-path来指定所有需要生成文档的请求路径基础规则,然后再利用swagger.exclude-path来剔除部分我们不需要的。

比如,通常我们可以这样设置:

management.context-path=/ops
swagger.base-path=/**
swagger.exclude-path=/ops/**, /error

面的设置将解析所有除了/ops/开始以及spring boot自带/error请求路径。

其中,exclude-path可以配合management.context-path=/ops设置的spring boot actuator的context-path来排除所有监控端点。

分组配置

当我们一个项目的API非常多的时候,我们希望对API文档实现分组。从1.2.0.RELEASE开始,将支持分组配置功能。

具体配置内容如下:

swagger.docket.<name>.title=标题
swagger.docket.<name>.description=描述
swagger.docket.<name>.version=版本
swagger.docket.<name>.license=许可证
swagger.docket.<name>.licenseUrl=许可证URL
swagger.docket.<name>.termsOfServiceUrl=服务条款URL
swagger.docket.<name>.contact.name=维护人
swagger.docket.<name>.contact.url=维护人URL
swagger.docket.<name>.contact.email=维护人email
swagger.docket.<name>.base-package=swagger扫描的基础包,默认:全扫描
swagger.docket.<name>.base-path=需要处理的基础URL规则,默认:/**
swagger.docket.<name>.exclude-path=需要排除的URL规则,默认:空
swagger.docket.<name>.name=参数名
swagger.docket.<name>.modelRef=指定参数类型
swagger.docket.<name>.parameterType=指定参数存放位置,可选header,query,path,body.form
swagger.docket.<name>.required=true=指定参数是否必传,true,false
swagger.docket.<name>.globalOperationParameters[0].name=参数名
swagger.docket.<name>.globalOperationParameters[0].description=描述信息
swagger.docket.<name>.globalOperationParameters[0].modelRef=指定参数存放位置,可选header,query,path,body.form
swagger.docket.<name>.globalOperationParameters[0].parameterType=指定参数是否必传,true,false

说明:<name>为swagger文档的分组名称,同一个项目中可以配置多个分组,用来划分不同的API文档。

分组配置示例

说明:默认配置与分组配置可以一起使用。在分组配置中没有配置的内容将使用默认配置替代,所以默认配置可以作为分组配置公共部分属性的配置。swagger.docket.aaa.globalOperationParameters[0].name会覆盖同名的全局配置。

JSR-303校验注解支持(1.5.0 + 支持)

支持对JSR-303校验注解的展示,如下图所示:

目前共支持以下几个注解:

  • @NotNull
  • @Max、@Min
  • @Size
  • @Pattern

自定义全局响应消息配置(1.6.0 + 支持)

支持 POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE 全局响应消息配置,配置如下

// 取消使用默认预定义的响应消息,并使用自定义响应消息
swagger.apply-default-response-messages=false
swagger.global-response-message.get[0].code=401
swagger.global-response-message.get[0].message=401get
swagger.global-response-message.get[1].code=500
swagger.global-response-message.get[1].message=500get
swagger.global-response-message.get[1].modelRef=ERROR
swagger.global-response-message.post[0].code=500
swagger.global-response-message.post[0].message=500post
swagger.global-response-message.post[0].modelRef=ERROR

UI功能配置(1.6.0 + 支持)

  • 调试按钮的控制(try it out)

swagger.ui-config.submit-methods=get,delete

该参数值为提供调试按钮的HTTP请求类型,多个用,分割。

如果不想开启调试功能,只需要如下设置即可:

swagger.ui-config.submit-methods=
  • 其他配置

# json编辑器
swagger.ui-config.json-editor=false
# 显示请求头
swagger.ui-config.show-request-headers=true
# 页面调试请求的超时时间
swagger.ui-config.request-timeout=5000

ignoredParameterTypes配置(1.6.0 + 支持)

# 基础配置
swagger.ignored-parameter-types[0]=com.didispace.demo.User
swagger.ignored-parameter-types[1]=com.didispace.demo.Product
# 分组配置
swagger.docket.aaa.ignored-parameter-types[0]=com.didispace.demo.User
swagger.docket.aaa.ignored-parameter-types[1]=com.didispace.demo.Product

该参数作用:

Q. Infinite loop when springfox tries to determine schema for objects with nested/complex constraints?

A. If you have recursively defined objects, I would try and see if providing an alternate type might work or perhaps even ignoring the offending classes e.g. order using the docket. ignoredParameterTypes(Order.class). This is usually found in Hibernate domain objects that have bidirectional dependencies on other objects.

Authorization 鉴权配置 (1.7.0 + 支持)

  • 新增 Authorization 配置项

# 鉴权策略ID,对应 SecurityReferences ID
swagger.authorization.name=Authorization
# 鉴权策略,可选 ApiKey | BasicAuth | None,默认ApiKey
swagger.authorization.type=ApiKey
# 鉴权传递的Header参数
swagger.authorization.key-name=token
# 需要开启鉴权URL的正则, 默认^.*$匹配所有URL
swagger.authorization.auth-regex=^.*$

备注:目前支持ApiKey | BasicAuth鉴权模式,None除消鉴权模式,默认ApiKey,后续添加Oauth2支持

使用须知

  1. 默认已经在全局开启了global的SecurityReferences,无需配置任何参数就可以使用;
  2. 全局鉴权的范围在可以通过以上参数auth-regex进行正则表达式匹配控制;
  3. 除了全局开启外,还可以手动通过注解在RestController上进行定义鉴权,使用方式如下:
// 其中的ID Authorization 即为配置项 swagger.authorization.name,详细请关注后面的配置代码
@ApiOperation(value = "Hello World", authorizations = {@Authorization(value = "Authorization")})
@RequestMapping(value = "/hello", method = RequestMethod.GET)
String hello();

关于如何配置实现鉴权,请关注以下code:

/**
 * 配置基于 ApiKey 的鉴权对象
 *
 * @return
 */
private ApiKey apiKey() {
    return new ApiKey(swaggerProperties().getAuthorization().getName(),
            swaggerProperties().getAuthorization().getKeyName(),
            ApiKeyVehicle.HEADER.getValue());
}
/**
 * 配置默认的全局鉴权策略的开关,以及通过正则表达式进行匹配;默认 ^.*$ 匹配所有URL
 * 其中 securityReferences 为配置启用的鉴权策略
 *
 * @return
 */
private SecurityContext securityContext() {
    return SecurityContext.builder()
            .securityReferences(defaultAuth())
            .forPaths(PathSelectors.regex(swaggerProperties().getAuthorization().getAuthRegex()))
            .build();
}
/**
 * 配置默认的全局鉴权策略;其中返回的 SecurityReference 中,reference 即为ApiKey对象里面的name,保持一致才能开启全局鉴权
 *
 * @return
 */
private List<SecurityReference> defaultAuth() {
    AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
    authorizationScopes[0] = authorizationScope;
    return Collections.singletonList(SecurityReference.builder()
            .reference(swaggerProperties().getAuthorization().getName())
            .scopes(authorizationScopes).build());
}

最后,如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:《Spring Boot 2.x基础教程》点击直达!!如果学习过程中如遇困难?可以加入我们Spring技术交流群,参与交流与讨论,更好的学习与进步!


目录
相关文章
|
前端开发 Java Maven
升级 SpringBoot 2.6.x 版本后,Swagger 没法用了
最近想体验下最新版本的SpringBoot,逛了下官网,发现SpringBoot目前最新版本已经是2.6.4了,版本更新确实够快的。之前的项目升级了2.6.4版本后发现有好多坑,不仅有循环依赖的问题,连Swagger都没法用了!今天给大家分享下升级过程,填一填这些坑! 聊聊SpringBoot版本 首先我们来聊聊SpringBoot的版本,目前最新版本是2.6.4版本,2.7.x即将发布,2.4.x及以下版本已经停止维护了,目前的主流版本应该是2.5.x和2.6.x。具体可以看下面这张表。
|
JSON Java API
Swagger 3.0 官方 starter 诞生,野生的可以扔了!
Swagger 3.0 官方 starter 诞生,野生的可以扔了!
4689 0
Swagger 3.0 官方 starter 诞生,野生的可以扔了!
|
Java Spring
【视频版】最新版Swagger 3升级指南和新功能体验!(3)
【视频版】最新版Swagger 3升级指南和新功能体验!(3)
307 0
【视频版】最新版Swagger 3升级指南和新功能体验!(3)
|
Java Spring
【视频版】最新版Swagger 3升级指南和新功能体验!(2)
【视频版】最新版Swagger 3升级指南和新功能体验!(2)
158 0
【视频版】最新版Swagger 3升级指南和新功能体验!(2)
|
前端开发 程序员 Linux
【视频版】最新版Swagger 3升级指南和新功能体验!(1)
【视频版】最新版Swagger 3升级指南和新功能体验!(1)
245 0
【视频版】最新版Swagger 3升级指南和新功能体验!(1)
【视频版】最新版Swagger 3升级指南和新功能体验!(4)
【视频版】最新版Swagger 3升级指南和新功能体验!(4)
271 0
|
监控 前端开发 Java
简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽
简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽
229 0
|
Java Spring 前端开发
简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽
项目简介 该项目主要利用Spring Boot的自动化配置特性来实现快速的将swagger2引入spring boot应用来生成API文档,简化原生使用swagger2的整合代码。
1175 0
|
4月前
|
数据可视化 Java API
Spring Boot与Swagger的集成
Spring Boot与Swagger的集成
|
4月前
|
Java API 开发者
在Spring Boot中集成Swagger API文档
在Spring Boot中集成Swagger API文档