2424import java .util .ArrayList ;
2525import java .util .LinkedList ;
2626import 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}
0 commit comments