diff --git a/README.md b/README.md
index 1f7a6b9..379d966 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,5 @@
# 简介
-[](https://travis-ci.org/dyc87112/spring-boot-starter-swagger)
-
该项目主要利用Spring Boot的自动化配置特性来实现快速的将swagger2引入spring boot应用来生成API文档,简化原生使用swagger2的整合代码。
- 源码地址
@@ -16,7 +14,7 @@
# 版本基础
- Spring Boot:1.5.x
-- Swagger:2.7.x
+- Swagger:2.8.x
# 如何使用
@@ -24,11 +22,13 @@
- 在`pom.xml`中引入依赖:
+> 当前最新版本 1.7.0.RELEASE
+
```xml
com.spring4all
swagger-spring-boot-starter
- 1.6.0.RELEASE
+ 1.7.0.RELEASE
```
@@ -254,8 +254,10 @@ swagger.ui-config.submit-methods=
```properties
# json编辑器
swagger.ui-config.json-editor=false
+
# 显示请求头
swagger.ui-config.show-request-headers=true
+
# 页面调试请求的超时时间
swagger.ui-config.request-timeout=5000
```
@@ -276,8 +278,81 @@ 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 配置项
+
+```properties
+# 鉴权策略ID,对应 SecurityReferences ID
+swagger.authorization.name=Authorization
+
+# 鉴权传递的Header参数
+swagger.authorization.key-name=token
+
+# 需要开启鉴权URL的正则, 默认^.*$匹配所有URL
+swagger.authorization.auth-regex=^.*$
+```
+
+备注:目前支持`ApiKey`鉴权模式,后续添加`Oauth2`和`BasicAuth`支持
+
+**使用须知**
+
+> 1. 默认已经在全局开启了`global`的SecurityReferences,无需配置任何参数就可以使用;
+> 2. 全局鉴权的范围在可以通过以上参数`auth-regex`进行正则表达式匹配控制;
+> 3. 除了全局开启外,还可以手动通过注解在RestController上进行定义鉴权,使用方式如下:
+
+```java
+// 其中的ID Authorization 即为配置项 swagger.authorization.name,详细请关注后面的配置代码
+@ApiOperation(value = "Hello World", authorizations = {@Authorization(value = "Authorization")})
+@RequestMapping(value = "/hello", method = RequestMethod.GET)
+String hello();
+```
+
+**关于如何配置实现鉴权,请关注以下code:**
+
+```java
+/**
+ * 配置基于 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 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());
+}
+```
+
## 贡献者
- [程序猿DD-翟永超](https://github.com/dyc87112/)
- [小火](https://renlulu.github.io/)
- [泥瓦匠BYSocket](https://github.com/JeffLi1993)
+- [LarryKoo-古拉里](https://github.com/gumutianqi)
diff --git a/pom.xml b/pom.xml
index 919934d..2a249ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.spring4all
swagger-spring-boot-starter
- 1.6.0.RELEASE
+ 1.7.0.RELEASE
spring-boot-starter-swagger
https://github.com/SpringForAll/spring-boot-starter-swagger
@@ -48,8 +48,9 @@
UTF-8
1.8
- 2.7.0
- 1.5.6.RELEASE
+ 2.8.0
+ 1.5.10.RELEASE
+ 1.16.18
@@ -81,7 +82,7 @@
org.projectlombok
lombok
- 1.16.12
+ ${version.lombok}
provided
diff --git a/src/main/java/com/spring4all/swagger/SwaggerAutoConfiguration.java b/src/main/java/com/spring4all/swagger/SwaggerAutoConfiguration.java
index c042126..143dd4e 100644
--- a/src/main/java/com/spring4all/swagger/SwaggerAutoConfiguration.java
+++ b/src/main/java/com/spring4all/swagger/SwaggerAutoConfiguration.java
@@ -2,7 +2,6 @@
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
-import com.google.common.collect.Lists;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
@@ -17,17 +16,19 @@
import org.springframework.web.bind.annotation.RequestMethod;
import springfox.documentation.builders.*;
import springfox.documentation.schema.ModelRef;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.Contact;
-import springfox.documentation.service.Parameter;
-import springfox.documentation.service.ResponseMessage;
+import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger.web.ApiKeyVehicle;
import springfox.documentation.swagger.web.UiConfiguration;
+import springfox.documentation.swagger.web.UiConfigurationBuilder;
import java.util.*;
import java.util.stream.Collectors;
+import static com.google.common.collect.Lists.newArrayList;
+
/**
* @author 翟永超
* Create date:2017/8/7.
@@ -49,15 +50,20 @@ public SwaggerProperties swaggerProperties() {
@Bean
public UiConfiguration uiConfiguration(SwaggerProperties swaggerProperties) {
- return new UiConfiguration(
- swaggerProperties.getUiConfig().getValidatorUrl(),// url
- swaggerProperties.getUiConfig().getDocExpansion(), // docExpansion => none | list
- swaggerProperties.getUiConfig().getApiSorter(), // apiSorter => alpha
- swaggerProperties.getUiConfig().getDefaultModelRendering(), // defaultModelRendering => schema
- swaggerProperties.getUiConfig().getSubmitMethods().split(","),
- swaggerProperties.getUiConfig().getJsonEditor(), // enableJsonEditor => true | false
- swaggerProperties.getUiConfig().getShowRequestHeaders(), // showRequestHeaders => true | false
- swaggerProperties.getUiConfig().getRequestTimeout()); // requestTimeout => in milliseconds, defaults to null (uses jquery xh timeout)
+ return UiConfigurationBuilder.builder()
+ .deepLinking(swaggerProperties.getUiConfig().getDeepLinking())
+ .defaultModelExpandDepth(swaggerProperties.getUiConfig().getDefaultModelExpandDepth())
+ .defaultModelRendering(swaggerProperties.getUiConfig().getDefaultModelRendering())
+ .defaultModelsExpandDepth(swaggerProperties.getUiConfig().getDefaultModelsExpandDepth())
+ .displayOperationId(swaggerProperties.getUiConfig().getDisplayOperationId())
+ .displayRequestDuration(swaggerProperties.getUiConfig().getDisplayRequestDuration())
+ .docExpansion(swaggerProperties.getUiConfig().getDocExpansion())
+ .maxDisplayedTags(swaggerProperties.getUiConfig().getMaxDisplayedTags())
+ .operationsSorter(swaggerProperties.getUiConfig().getOperationsSorter())
+ .showExtensions(swaggerProperties.getUiConfig().getShowExtensions())
+ .tagsSorter(swaggerProperties.getUiConfig().getTagsSorter())
+ .validatorUrl(swaggerProperties.getUiConfig().getValidatorUrl())
+ .build();
}
@Bean
@@ -93,7 +99,7 @@ public List createRestApi(SwaggerProperties swaggerProperties) {
}
// exclude-path处理
- List> excludePath = new ArrayList();
+ List> excludePath = new ArrayList<>();
for (String path : swaggerProperties.getExcludePath()) {
excludePath.add(PathSelectors.ant(path));
}
@@ -101,6 +107,8 @@ public List createRestApi(SwaggerProperties swaggerProperties) {
Docket docketForBuilder = new Docket(DocumentationType.SWAGGER_2)
.host(swaggerProperties.getHost())
.apiInfo(apiInfo)
+ .securitySchemes(Collections.singletonList(apiKey()))
+ .securityContexts(Collections.singletonList(securityContext()))
.globalOperationParameters(buildGlobalOperationParametersFromSwaggerProperties(
swaggerProperties.getGlobalOperationParameters()));
@@ -118,9 +126,9 @@ public List createRestApi(SwaggerProperties swaggerProperties) {
)
).build();
- /** ignoredParameterTypes **/
- Class[] array = new Class[swaggerProperties.getIgnoredParameterTypes().size()];
- Class[] ignoredParameterTypes = swaggerProperties.getIgnoredParameterTypes().toArray(array);
+ /* ignoredParameterTypes **/
+ Class>[] array = new Class[swaggerProperties.getIgnoredParameterTypes().size()];
+ Class>[] ignoredParameterTypes = swaggerProperties.getIgnoredParameterTypes().toArray(array);
docket.ignoredParameterTypes(ignoredParameterTypes);
configurableBeanFactory.registerSingleton("defaultDocket", docket);
@@ -167,6 +175,8 @@ public List createRestApi(SwaggerProperties swaggerProperties) {
Docket docketForBuilder = new Docket(DocumentationType.SWAGGER_2)
.host(swaggerProperties.getHost())
.apiInfo(apiInfo)
+ .securitySchemes(Collections.singletonList(apiKey()))
+ .securityContexts(Collections.singletonList(securityContext()))
.globalOperationParameters(assemblyGlobalOperationParameters(swaggerProperties.getGlobalOperationParameters(),
docketInfo.getGlobalOperationParameters()));
@@ -186,9 +196,9 @@ public List createRestApi(SwaggerProperties swaggerProperties) {
)
.build();
- /** ignoredParameterTypes **/
- Class[] array = new Class[docketInfo.getIgnoredParameterTypes().size()];
- Class[] ignoredParameterTypes = docketInfo.getIgnoredParameterTypes().toArray(array);
+ /* ignoredParameterTypes **/
+ Class>[] array = new Class[docketInfo.getIgnoredParameterTypes().size()];
+ Class>[] ignoredParameterTypes = docketInfo.getIgnoredParameterTypes().toArray(array);
docket.ignoredParameterTypes(ignoredParameterTypes);
configurableBeanFactory.registerSingleton(groupName, docket);
@@ -197,6 +207,44 @@ public List createRestApi(SwaggerProperties swaggerProperties) {
return docketList;
}
+ /**
+ * 配置基于 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 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());
+ }
+
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
@@ -206,7 +254,7 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
private List buildGlobalOperationParametersFromSwaggerProperties(
List globalOperationParameters) {
- List parameters = Lists.newArrayList();
+ List parameters = newArrayList();
if (Objects.isNull(globalOperationParameters)) {
return parameters;
@@ -242,7 +290,7 @@ private List assemblyGlobalOperationParameters(
.map(SwaggerProperties.GlobalOperationParameter::getName)
.collect(Collectors.toSet());
- List resultOperationParameters = Lists.newArrayList();
+ List resultOperationParameters = newArrayList();
if (Objects.nonNull(globalOperationParameters)) {
for (SwaggerProperties.GlobalOperationParameter parameter : globalOperationParameters) {
@@ -259,42 +307,43 @@ private List assemblyGlobalOperationParameters(
/**
* 设置全局响应消息
*
- * @param swaggerProperties 支持 POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE
- * @param docketForBuilder
+ * @param swaggerProperties swaggerProperties 支持 POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE
+ * @param docketForBuilder swagger docket builder
*/
private void buildGlobalResponseMessage(SwaggerProperties swaggerProperties, Docket docketForBuilder) {
SwaggerProperties.GlobalResponseMessage globalResponseMessages =
swaggerProperties.getGlobalResponseMessage();
- // POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE 响应消息体
- List postResponseMessages = getResponseMessageList(globalResponseMessages.getPost());
- List getResponseMessages = getResponseMessageList(globalResponseMessages.getGet());
- List putResponseMessages = getResponseMessageList(globalResponseMessages.getPut());
- List patchResponseMessages = getResponseMessageList(globalResponseMessages.getPatch());
- List deleteResponseMessages = getResponseMessageList(globalResponseMessages.getDelete());
- List headResponseMessages = getResponseMessageList(globalResponseMessages.getHead());
- List optionsResponseMessages = getResponseMessageList(globalResponseMessages.getOptions());
- List trackResponseMessages = getResponseMessageList(globalResponseMessages.getTrace());
+ /* POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE 响应消息体 **/
+ List postResponseMessages = getResponseMessageList(globalResponseMessages.getPost());
+ List getResponseMessages = getResponseMessageList(globalResponseMessages.getGet());
+ List putResponseMessages = getResponseMessageList(globalResponseMessages.getPut());
+ List patchResponseMessages = getResponseMessageList(globalResponseMessages.getPatch());
+ List deleteResponseMessages = getResponseMessageList(globalResponseMessages.getDelete());
+ List headResponseMessages = getResponseMessageList(globalResponseMessages.getHead());
+ List optionsResponseMessages = getResponseMessageList(globalResponseMessages.getOptions());
+ List trackResponseMessages = getResponseMessageList(globalResponseMessages.getTrace());
docketForBuilder.useDefaultResponseMessages(swaggerProperties.getApplyDefaultResponseMessages())
- .globalResponseMessage(RequestMethod.POST, postResponseMessages)
- .globalResponseMessage(RequestMethod.GET, getResponseMessages)
- .globalResponseMessage(RequestMethod.PUT, putResponseMessages)
- .globalResponseMessage(RequestMethod.PATCH, patchResponseMessages)
- .globalResponseMessage(RequestMethod.DELETE, deleteResponseMessages)
- .globalResponseMessage(RequestMethod.HEAD, headResponseMessages)
- .globalResponseMessage(RequestMethod.OPTIONS, optionsResponseMessages)
- .globalResponseMessage(RequestMethod.TRACE, trackResponseMessages);
+ .globalResponseMessage(RequestMethod.POST, postResponseMessages)
+ .globalResponseMessage(RequestMethod.GET, getResponseMessages)
+ .globalResponseMessage(RequestMethod.PUT, putResponseMessages)
+ .globalResponseMessage(RequestMethod.PATCH, patchResponseMessages)
+ .globalResponseMessage(RequestMethod.DELETE, deleteResponseMessages)
+ .globalResponseMessage(RequestMethod.HEAD, headResponseMessages)
+ .globalResponseMessage(RequestMethod.OPTIONS, optionsResponseMessages)
+ .globalResponseMessage(RequestMethod.TRACE, trackResponseMessages);
}
/**
* 获取返回消息体列表
*
- * @param globalResponseMessageBodyList
+ * @param globalResponseMessageBodyList 全局Code消息返回集合
* @return
*/
- private List getResponseMessageList(List globalResponseMessageBodyList) {
+ private List getResponseMessageList
+ (List globalResponseMessageBodyList) {
List responseMessages = new ArrayList<>();
for (SwaggerProperties.GlobalResponseMessageBody globalResponseMessageBody : globalResponseMessageBodyList) {
ResponseMessageBuilder responseMessageBuilder = new ResponseMessageBuilder();
diff --git a/src/main/java/com/spring4all/swagger/SwaggerProperties.java b/src/main/java/com/spring4all/swagger/SwaggerProperties.java
index 8c2616c..0a43142 100644
--- a/src/main/java/com/spring4all/swagger/SwaggerProperties.java
+++ b/src/main/java/com/spring4all/swagger/SwaggerProperties.java
@@ -3,6 +3,10 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
+import springfox.documentation.swagger.web.DocExpansion;
+import springfox.documentation.swagger.web.ModelRendering;
+import springfox.documentation.swagger.web.OperationsSorter;
+import springfox.documentation.swagger.web.TagsSorter;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -18,70 +22,118 @@
@ConfigurationProperties("swagger")
public class SwaggerProperties {
- /**是否开启swagger**/
+ /**
+ * 是否开启swagger
+ **/
private Boolean enabled;
- /**标题**/
+ /**
+ * 标题
+ **/
private String title = "";
- /**描述**/
+ /**
+ * 描述
+ **/
private String description = "";
- /**版本**/
+ /**
+ * 版本
+ **/
private String version = "";
- /**许可证**/
+ /**
+ * 许可证
+ **/
private String license = "";
- /**许可证URL**/
+ /**
+ * 许可证URL
+ **/
private String licenseUrl = "";
- /**服务条款URL**/
+ /**
+ * 服务条款URL
+ **/
private String termsOfServiceUrl = "";
- /**忽略的参数类型**/
- private List ignoredParameterTypes = new ArrayList<>();
+ /**
+ * 忽略的参数类型
+ **/
+ private List> ignoredParameterTypes = new ArrayList<>();
private Contact contact = new Contact();
- /**swagger会解析的包路径**/
+ /**
+ * swagger会解析的包路径
+ **/
private String basePackage = "";
- /**swagger会解析的url规则**/
+ /**
+ * swagger会解析的url规则
+ **/
private List basePath = new ArrayList<>();
- /**在basePath基础上需要排除的url规则**/
+ /**
+ * 在basePath基础上需要排除的url规则
+ **/
private List excludePath = new ArrayList<>();
- /**分组文档**/
+ /**
+ * 分组文档
+ **/
private Map docket = new LinkedHashMap<>();
- /**host信息**/
+ /**
+ * host信息
+ **/
private String host = "";
- /**全局参数配置**/
+ /**
+ * 全局参数配置
+ **/
private List globalOperationParameters;
- /** 页面功能配置 **/
+ /**
+ * 页面功能配置
+ **/
private UiConfig uiConfig = new UiConfig();
- /** 是否使用默认预定义的响应消息 ,默认 true **/
+ /**
+ * 是否使用默认预定义的响应消息 ,默认 true
+ **/
private Boolean applyDefaultResponseMessages = true;
- /** 全局响应消息 **/
+ /**
+ * 全局响应消息
+ **/
private GlobalResponseMessage globalResponseMessage;
+ /**
+ * 全局统一鉴权配置
+ **/
+ private Authorization authorization = new Authorization();
@Data
@NoArgsConstructor
- public static class GlobalOperationParameter{
- /**参数名**/
+ public static class GlobalOperationParameter {
+ /**
+ * 参数名
+ **/
private String name;
- /**描述信息**/
+ /**
+ * 描述信息
+ **/
private String description;
- /**指定参数类型**/
+ /**
+ * 指定参数类型
+ **/
private String modelRef;
- /**参数放在哪个地方:header,query,path,body.form**/
+ /**
+ * 参数放在哪个地方:header,query,path,body.form
+ **/
private String parameterType;
- /**参数是否必须传**/
+ /**
+ * 参数是否必须传
+ **/
private String required;
}
@@ -90,33 +142,53 @@ public static class GlobalOperationParameter{
@NoArgsConstructor
public static class DocketInfo {
- /**标题**/
+ /**
+ * 标题
+ **/
private String title = "";
- /**描述**/
+ /**
+ * 描述
+ **/
private String description = "";
- /**版本**/
+ /**
+ * 版本
+ **/
private String version = "";
- /**许可证**/
+ /**
+ * 许可证
+ **/
private String license = "";
- /**许可证URL**/
+ /**
+ * 许可证URL
+ **/
private String licenseUrl = "";
- /**服务条款URL**/
+ /**
+ * 服务条款URL
+ **/
private String termsOfServiceUrl = "";
private Contact contact = new Contact();
- /**swagger会解析的包路径**/
+ /**
+ * swagger会解析的包路径
+ **/
private String basePackage = "";
- /**swagger会解析的url规则**/
+ /**
+ * swagger会解析的url规则
+ **/
private List basePath = new ArrayList<>();
- /**在basePath基础上需要排除的url规则**/
+ /**
+ * 在basePath基础上需要排除的url规则
+ **/
private List excludePath = new ArrayList<>();
private List globalOperationParameters;
- /**忽略的参数类型**/
- private List ignoredParameterTypes = new ArrayList<>();
+ /**
+ * 忽略的参数类型
+ **/
+ private List> ignoredParameterTypes = new ArrayList<>();
}
@@ -124,11 +196,17 @@ public static class DocketInfo {
@NoArgsConstructor
public static class Contact {
- /**联系人**/
+ /**
+ * 联系人
+ **/
private String name = "";
- /**联系人url**/
+ /**
+ * 联系人url
+ **/
private String url = "";
- /**联系人email**/
+ /**
+ * 联系人email
+ **/
private String email = "";
}
@@ -137,28 +215,44 @@ public static class Contact {
@NoArgsConstructor
public static class GlobalResponseMessage {
- /** POST 响应消息体 **/
+ /**
+ * POST 响应消息体
+ **/
List post = new ArrayList<>();
- /** GET 响应消息体 **/
+ /**
+ * GET 响应消息体
+ **/
List get = new ArrayList<>();
- /** PUT 响应消息体 **/
+ /**
+ * PUT 响应消息体
+ **/
List put = new ArrayList<>();
- /** PATCH 响应消息体 **/
+ /**
+ * PATCH 响应消息体
+ **/
List patch = new ArrayList<>();
- /** DELETE 响应消息体 **/
+ /**
+ * DELETE 响应消息体
+ **/
List delete = new ArrayList<>();
- /** HEAD 响应消息体 **/
+ /**
+ * HEAD 响应消息体
+ **/
List head = new ArrayList<>();
- /** OPTIONS 响应消息体 **/
+ /**
+ * OPTIONS 响应消息体
+ **/
List options = new ArrayList<>();
- /** TRACE 响应消息体 **/
+ /**
+ * TRACE 响应消息体
+ **/
List trace = new ArrayList<>();
}
@@ -167,13 +261,19 @@ public static class GlobalResponseMessage {
@NoArgsConstructor
public static class GlobalResponseMessageBody {
- /** 响应码 **/
+ /**
+ * 响应码
+ **/
private int code;
- /** 响应消息 **/
+ /**
+ * 响应消息
+ **/
private String message;
- /** 响应体 **/
+ /**
+ * 响应体
+ **/
private String modelRef;
}
@@ -183,20 +283,76 @@ public static class GlobalResponseMessageBody {
@NoArgsConstructor
public static class UiConfig {
- private String validatorUrl;
- private String docExpansion = "none"; // none | list
- private String apiSorter = "alpha"; // alpha
- private String defaultModelRendering = "schema"; // schema
- /** 是否启用json编辑器 **/
+ private String apiSorter = "alpha";
+
+ /**
+ * 是否启用json编辑器
+ **/
private Boolean jsonEditor = false;
- /** 是否显示请求头信息 **/
+ /**
+ * 是否显示请求头信息
+ **/
private Boolean showRequestHeaders = true;
- /** 支持页面提交的请求类型 **/
+ /**
+ * 支持页面提交的请求类型
+ **/
private String submitMethods = "get,post,put,delete,patch";
- /** 请求超时时间 **/
+ /**
+ * 请求超时时间
+ **/
private Long requestTimeout = 10000L;
+ private Boolean deepLinking;
+ private Boolean displayOperationId;
+ private Integer defaultModelsExpandDepth;
+ private Integer defaultModelExpandDepth;
+ private ModelRendering defaultModelRendering;
+
+ /**
+ * 是否显示请求耗时,默认false
+ */
+ private Boolean displayRequestDuration = true;
+ /**
+ * 可选 none | list
+ */
+ private DocExpansion docExpansion;
+ /**
+ * Boolean=false OR String
+ */
+ private Object filter;
+ private Integer maxDisplayedTags;
+ private OperationsSorter operationsSorter;
+ private Boolean showExtensions;
+ private TagsSorter tagsSorter;
+
+ /**
+ * Network
+ */
+ private String validatorUrl;
+ }
+
+ /**
+ * securitySchemes 支持方式之一 ApiKey
+ */
+ @Data
+ @NoArgsConstructor
+ static class Authorization {
+
+ /**
+ * 鉴权策略ID,对应 SecurityReferences ID
+ */
+ private String name = "Authorization";
+
+ /**
+ * 鉴权传递的Header参数
+ */
+ private String keyName = "TOKEN";
+
+ /**
+ * 需要开启鉴权URL的正则
+ */
+ private String authRegex = "^.*$";
}
}