Skip to content

Commit 3dd02c0

Browse files
committed
1.4.0 完善分组配置和文档
1 parent 0d27195 commit 3dd02c0

File tree

3 files changed

+61
-10
lines changed

3 files changed

+61
-10
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ swagger.globalOperationParameters[1].required=false
102102
- swagger.globalOperationParameters[0].required=指定参数是否必传,true,false
103103
```
104104

105+
105106
> host属性从1.3.0.RELEASE开始支持
106107
107108
### Path规则说明
@@ -148,10 +149,15 @@ swagger.exclude-path=/ops/**, /error
148149
- swagger.docket.<name>.modelRef=指定参数类型
149150
- swagger.docket.<name>.parameterType=指定参数存放位置,可选header,query,path,body.form
150151
- swagger.docket.<name>.required=true=指定参数是否必传,true,false
152+
- swagger.docket.<name>.globalOperationParameters[0].name=参数名
153+
- swagger.docket.<name>.globalOperationParameters[0].description=描述信息
154+
- swagger.docket.<name>.globalOperationParameters[0].modelRef=指定参数存放位置,可选header,query,path,body.form
155+
- swagger.docket.<name>.globalOperationParameters[0].parameterType=指定参数是否必传,true,false
151156
```
152157

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

160+
155161
**分组配置示例**
156162

157163
```properties
@@ -163,13 +169,21 @@ swagger.docket.aaa.contact.name=zhaiyongchao
163169
swagger.docket.aaa.contact.url=http://spring4all.com/
164170
swagger.docket.aaa.contact.email[email protected]
165171
swagger.docket.aaa.excludePath=/ops/**
172+
swagger.docket.aaa.globalOperationParameters[0].name=name three
173+
swagger.docket.aaa.globalOperationParameters[0].description=some description three override
174+
swagger.docket.aaa.globalOperationParameters[0].modelRef=string
175+
swagger.docket.aaa.globalOperationParameters[0].parameterType=header
166176

167177
swagger.docket.bbb.title=group-bbb
168178
swagger.docket.bbb.basePackage=com.yonghui
179+
180+
169181
```
170182

171183
说明:默认配置与分组配置可以一起使用。在分组配置中没有配置的内容将使用默认配置替代,所以默认配置可以作为分组配置公共部分属性的配置。
172184

185+
`swagger.docket.aaa.globalOperationParameters[0].name` 会覆盖同名的全局配置
186+
173187
### JSR-303校验注解支持
174188

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

src/main/java/com/didispace/swagger/SwaggerAutoConfiguration.java

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import java.util.ArrayList;
2525
import java.util.LinkedList;
2626
import java.util.List;
27+
import java.util.Set;
28+
import java.util.stream.Collectors;
2729

2830
/**
2931
* @author 翟永超
@@ -80,7 +82,8 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
8082
Docket docket = new Docket(DocumentationType.SWAGGER_2)
8183
.host(swaggerProperties.getHost())
8284
.apiInfo(apiInfo)
83-
.globalOperationParameters(buildGlobalOperationParametersFromSwaggerProperties(swaggerProperties))
85+
.globalOperationParameters(buildGlobalOperationParametersFromSwaggerProperties(
86+
swaggerProperties.getGlobalOperationParameters()))
8487
.select()
8588
.apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
8689
.paths(
@@ -135,7 +138,8 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
135138
Docket docket = new Docket(DocumentationType.SWAGGER_2)
136139
.host(swaggerProperties.getHost())
137140
.apiInfo(apiInfo)
138-
.globalOperationParameters(buildGlobalOperationParametersFromSwaggerProperties(swaggerProperties))
141+
.globalOperationParameters(assemblyGlobalOperationParameters(swaggerProperties.getGlobalOperationParameters(),
142+
docketInfo.getGlobalOperationParameters()))
139143
.groupName(groupName)
140144
.select()
141145
.apis(RequestHandlerSelectors.basePackage(docketInfo.getBasePackage()))
@@ -158,17 +162,48 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
158162
this.beanFactory = beanFactory;
159163
}
160164

161-
private List<Parameter> buildGlobalOperationParametersFromSwaggerProperties(SwaggerProperties swaggerProperties) {
165+
private List<Parameter> buildGlobalOperationParametersFromSwaggerProperties(
166+
List<SwaggerProperties.GlobalOperationParameter> globalOperationParameters) {
162167
List<Parameter> parameters = Lists.newArrayList();
163-
for (int i = 0; i < swaggerProperties.getGlobalOperationParameters().size(); i++) {
168+
for (SwaggerProperties.GlobalOperationParameter globalOperationParameter : globalOperationParameters) {
164169
parameters.add(new ParameterBuilder()
165-
.name(swaggerProperties.getGlobalOperationParameters().get(i).getName())
166-
.description(swaggerProperties.getGlobalOperationParameters().get(i).getDescription())
167-
.modelRef(new ModelRef(swaggerProperties.getGlobalOperationParameters().get(i).getModelRef()))
168-
.parameterType(swaggerProperties.getGlobalOperationParameters().get(i).getParameterType())
169-
.required(Boolean.parseBoolean(swaggerProperties.getGlobalOperationParameters().get(i).getRequired()))
170+
.name(globalOperationParameter.getName())
171+
.description(globalOperationParameter.getDescription())
172+
.modelRef(new ModelRef(globalOperationParameter.getModelRef()))
173+
.parameterType(globalOperationParameter.getParameterType())
174+
.required(Boolean.parseBoolean(globalOperationParameter.getRequired()))
170175
.build());
171176
}
172177
return parameters;
173178
}
179+
180+
/**
181+
* 局部参数按照name覆盖局部参数
182+
*
183+
* @param globalOperationParameters
184+
* @param docketOperationParameters
185+
* @return
186+
*/
187+
private List<Parameter> assemblyGlobalOperationParameters(
188+
List<SwaggerProperties.GlobalOperationParameter> globalOperationParameters,
189+
List<SwaggerProperties.GlobalOperationParameter> docketOperationParameters) {
190+
191+
if (docketOperationParameters == null || docketOperationParameters.isEmpty()) {
192+
return buildGlobalOperationParametersFromSwaggerProperties(globalOperationParameters);
193+
}
194+
195+
Set<String> docketNames = docketOperationParameters.stream()
196+
.map(SwaggerProperties.GlobalOperationParameter::getName)
197+
.collect(Collectors.toSet());
198+
199+
List<SwaggerProperties.GlobalOperationParameter> resultOperationParameters = Lists.newArrayList();
200+
201+
for (SwaggerProperties.GlobalOperationParameter parameter : globalOperationParameters) {
202+
if (!docketNames.contains(parameter.getName())) {
203+
resultOperationParameters.add(parameter);
204+
}
205+
}
206+
resultOperationParameters.addAll(docketOperationParameters);
207+
return buildGlobalOperationParametersFromSwaggerProperties(resultOperationParameters);
208+
}
174209
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ public class SwaggerProperties {
5454

5555
@Data
5656
@NoArgsConstructor
57-
@ConfigurationProperties("swagger.globalOperationParameters")
5857
public static class GlobalOperationParameter{
5958
/**参数名**/
6059
private String name;
@@ -70,6 +69,7 @@ public static class GlobalOperationParameter{
7069

7170
/**参数是否必须传**/
7271
private String required;
72+
7373
}
7474

7575
@Data
@@ -99,6 +99,8 @@ public static class DocketInfo {
9999
/**在basePath基础上需要排除的url规则**/
100100
private List<String> excludePath = new ArrayList<>();
101101

102+
private List<GlobalOperationParameter> globalOperationParameters;
103+
102104
}
103105

104106
@Data

0 commit comments

Comments
 (0)