Skip to content

Commit 570b072

Browse files
committed
fix: Adding global Configuration
1 parent 08277d0 commit 570b072

File tree

2 files changed

+62
-15
lines changed

2 files changed

+62
-15
lines changed

src/main/java/com/spring4all/swagger/DocketConfiguration.java

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.spring4all.swagger;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
5-
import java.util.Map;
3+
import static com.google.common.collect.Lists.newArrayList;
4+
5+
import java.util.*;
66
import java.util.function.Predicate;
77
import java.util.stream.Collectors;
88

@@ -19,12 +19,14 @@
1919

2020
import com.google.common.base.Predicates;
2121

22+
import org.springframework.context.annotation.DependsOn;
2223
import springfox.documentation.builders.ApiInfoBuilder;
2324
import springfox.documentation.builders.RequestHandlerSelectors;
2425
import springfox.documentation.builders.RequestParameterBuilder;
2526
import springfox.documentation.schema.ScalarType;
2627
import springfox.documentation.service.ApiInfo;
2728
import springfox.documentation.service.Contact;
29+
import springfox.documentation.service.ParameterType;
2830
import springfox.documentation.service.RequestParameter;
2931
import springfox.documentation.spi.DocumentationType;
3032
import springfox.documentation.spring.web.plugins.Docket;
@@ -70,8 +72,10 @@ public void createSpringFoxRestApi() {
7072

7173
Docket docket4Group = (Docket)beanFactory.getBean(beanName);
7274
ApiInfo apiInfo = apiInfo(swaggerProperties);
73-
docket4Group.host(swaggerProperties.getHost()).apiInfo(apiInfo).select()
74-
.apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
75+
docket4Group.host(swaggerProperties.getHost()).apiInfo(apiInfo)
76+
.globalRequestParameters(
77+
assemblyRequestParameters(swaggerProperties.getGlobalOperationParameters(), new ArrayList<>()))
78+
.select().apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
7579
.paths(paths(swaggerProperties.getBasePath(), swaggerProperties.getExcludePath())).build();
7680
return;
7781
}
@@ -124,28 +128,64 @@ public void createSpringFoxRestApi() {
124128
beanRegistry.registerBeanDefinition(beanName, beanDefinition4Group);
125129

126130
Docket docket4Group = (Docket)beanFactory.getBean(beanName);
127-
docket4Group.groupName(groupName).host(docketInfo.getBasePackage()).apiInfo(apiInfo).select()
128-
.apis(RequestHandlerSelectors.basePackage(docketInfo.getBasePackage()))
131+
docket4Group.groupName(groupName).host(docketInfo.getBasePackage()).apiInfo(apiInfo)
132+
.globalRequestParameters(assemblyRequestParameters(swaggerProperties.getGlobalOperationParameters(),
133+
docketInfo.getGlobalOperationParameters()))
134+
.select().apis(RequestHandlerSelectors.basePackage(docketInfo.getBasePackage()))
129135
.paths(paths(docketInfo.getBasePath(), docketInfo.getExcludePath())).build();
130136
}
131137
}
132138

133139
/**
134140
* 全局请求参数
135141
*
136-
* @param swaggerProperties
142+
* @param properties
137143
* {@link SwaggerProperties}
138144
* @return RequestParameter {@link RequestParameter}
139145
*/
140-
private List<RequestParameter> globalRequestParameters(SwaggerProperties swaggerProperties) {
141-
return swaggerProperties.getGlobalOperationParameters().stream()
146+
private List<RequestParameter> getRequestParameters(List<SwaggerProperties.GlobalOperationParameter> properties) {
147+
return properties.stream()
142148
.map(param -> new RequestParameterBuilder().name(param.getName()).description(param.getDescription())
143-
.in(param.getParameterType()).required(param.getRequired())
144-
.query(q -> q.defaultValue(param.getModelRef()))
145-
.query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))).build())
149+
.in(ParameterType.from(param.getParameterType())).required(param.getRequired())
150+
.query(q -> q.defaultValue(param.getType()))
151+
.query(q -> q.model(m -> m.scalarModel(!ScalarType.from(param.getType(), param.getFormat()).isPresent()
152+
? ScalarType.STRING : ScalarType.from(param.getType(), param.getFormat()).get())))
153+
.build())
146154
.collect(Collectors.toList());
147155
}
148156

157+
/**
158+
* 局部参数按照name覆盖局部参数
159+
*
160+
* @param globalRequestParameters
161+
* @param groupRequestParameters
162+
* @return
163+
*/
164+
private List<RequestParameter> assemblyRequestParameters(
165+
List<SwaggerProperties.GlobalOperationParameter> globalRequestParameters,
166+
List<SwaggerProperties.GlobalOperationParameter> groupRequestParameters) {
167+
168+
if (Objects.isNull(groupRequestParameters) || groupRequestParameters.isEmpty()) {
169+
return getRequestParameters(globalRequestParameters);
170+
}
171+
172+
Set<String> paramNames = groupRequestParameters.stream()
173+
.map(SwaggerProperties.GlobalOperationParameter::getName).collect(Collectors.toSet());
174+
175+
List<SwaggerProperties.GlobalOperationParameter> requestParameters = newArrayList();
176+
177+
if (Objects.nonNull(globalRequestParameters)) {
178+
for (SwaggerProperties.GlobalOperationParameter parameter : globalRequestParameters) {
179+
if (!paramNames.contains(parameter.getName())) {
180+
requestParameters.add(parameter);
181+
}
182+
}
183+
}
184+
185+
requestParameters.addAll(groupRequestParameters);
186+
return getRequestParameters(requestParameters);
187+
}
188+
149189
/**
150190
* API接口路径选择
151191
*

src/main/java/com/spring4all/swagger/SwaggerProperties.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.List;
66
import java.util.Map;
77

8+
import org.springframework.beans.factory.annotation.Value;
89
import org.springframework.boot.context.properties.ConfigurationProperties;
910

1011
import lombok.Data;
@@ -106,7 +107,13 @@ public static class GlobalOperationParameter {
106107
/**
107108
* 指定参数类型
108109
**/
109-
private String modelRef;
110+
@Value("modelRef")
111+
private String type;
112+
113+
/**
114+
* 指定参数类型
115+
**/
116+
private String format = "";
110117

111118
/**
112119
* 参数放在哪个地方:header,query,path,formData,cookie,form
@@ -116,7 +123,7 @@ public static class GlobalOperationParameter {
116123
/**
117124
* 参数是否必须传
118125
**/
119-
private Boolean required;
126+
private Boolean required = false;
120127

121128
}
122129

0 commit comments

Comments
 (0)