77import org .springframework .beans .factory .BeanFactory ;
88import org .springframework .beans .factory .BeanFactoryAware ;
99import org .springframework .beans .factory .config .ConfigurableBeanFactory ;
10+ import org .springframework .boot .autoconfigure .condition .ConditionalOnBean ;
1011import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
1112import org .springframework .boot .autoconfigure .condition .ConditionalOnProperty ;
1213import org .springframework .context .annotation .Bean ;
1314import org .springframework .context .annotation .Configuration ;
1415import org .springframework .context .annotation .Import ;
15- import springfox .documentation .builders .ApiInfoBuilder ;
16- import springfox .documentation .builders .ParameterBuilder ;
17- import springfox .documentation .builders .PathSelectors ;
18- import springfox .documentation .builders .RequestHandlerSelectors ;
16+ import org .springframework .util .StringUtils ;
17+ import org .springframework .web .bind .annotation .RequestMethod ;
18+ import springfox .documentation .builders .*;
1919import springfox .documentation .schema .ModelRef ;
2020import springfox .documentation .service .ApiInfo ;
2121import springfox .documentation .service .Contact ;
2222import springfox .documentation .service .Parameter ;
23+ import springfox .documentation .service .ResponseMessage ;
2324import springfox .documentation .spi .DocumentationType ;
2425import springfox .documentation .spring .web .plugins .Docket ;
26+ import springfox .documentation .swagger .web .UiConfiguration ;
2527
2628import java .util .*;
2729import java .util .stream .Collectors ;
@@ -45,8 +47,22 @@ public SwaggerProperties swaggerProperties() {
4547 return new SwaggerProperties ();
4648 }
4749
50+ @ Bean
51+ public UiConfiguration uiConfiguration (SwaggerProperties swaggerProperties ) {
52+ return new UiConfiguration (
53+ swaggerProperties .getUiConfig ().getValidatorUrl (),// url
54+ swaggerProperties .getUiConfig ().getDocExpansion (), // docExpansion => none | list
55+ swaggerProperties .getUiConfig ().getApiSorter (), // apiSorter => alpha
56+ swaggerProperties .getUiConfig ().getDefaultModelRendering (), // defaultModelRendering => schema
57+ swaggerProperties .getUiConfig ().getSubmitMethods ().split ("," ),
58+ swaggerProperties .getUiConfig ().getJsonEditor (), // enableJsonEditor => true | false
59+ swaggerProperties .getUiConfig ().getShowRequestHeaders (), // showRequestHeaders => true | false
60+ swaggerProperties .getUiConfig ().getRequestTimeout ()); // requestTimeout => in milliseconds, defaults to null (uses jquery xh timeout)
61+ }
62+
4863 @ Bean
4964 @ ConditionalOnMissingBean
65+ @ ConditionalOnBean (UiConfiguration .class )
5066 @ ConditionalOnProperty (name = "swagger.enabled" , matchIfMissing = true )
5167 public List <Docket > createRestApi (SwaggerProperties swaggerProperties ) {
5268 ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory ) beanFactory ;
@@ -82,20 +98,30 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
8298 excludePath .add (PathSelectors .ant (path ));
8399 }
84100
85- Docket docket = new Docket (DocumentationType .SWAGGER_2 )
101+ Docket docketForBuilder = new Docket (DocumentationType .SWAGGER_2 )
86102 .host (swaggerProperties .getHost ())
87103 .apiInfo (apiInfo )
88104 .globalOperationParameters (buildGlobalOperationParametersFromSwaggerProperties (
89- swaggerProperties .getGlobalOperationParameters ()))
90- .select ()
105+ swaggerProperties .getGlobalOperationParameters ()));
106+
107+ // 全局响应消息
108+ if (!swaggerProperties .getApplyDefaultResponseMessages ()) {
109+ buildGlobalResponseMessage (swaggerProperties , docketForBuilder );
110+ }
111+
112+ Docket docket = docketForBuilder .select ()
91113 .apis (RequestHandlerSelectors .basePackage (swaggerProperties .getBasePackage ()))
92114 .paths (
93115 Predicates .and (
94116 Predicates .not (Predicates .or (excludePath )),
95117 Predicates .or (basePath )
96118 )
97- )
98- .build ();
119+ ).build ();
120+
121+ /** ignoredParameterTypes **/
122+ Class [] array = new Class [swaggerProperties .getIgnoredParameterTypes ().size ()];
123+ Class [] ignoredParameterTypes = swaggerProperties .getIgnoredParameterTypes ().toArray (array );
124+ docket .ignoredParameterTypes (ignoredParameterTypes );
99125
100126 configurableBeanFactory .registerSingleton ("defaultDocket" , docket );
101127 docketList .add (docket );
@@ -138,12 +164,18 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
138164 excludePath .add (PathSelectors .ant (path ));
139165 }
140166
141- Docket docket = new Docket (DocumentationType .SWAGGER_2 )
167+ Docket docketForBuilder = new Docket (DocumentationType .SWAGGER_2 )
142168 .host (swaggerProperties .getHost ())
143169 .apiInfo (apiInfo )
144170 .globalOperationParameters (assemblyGlobalOperationParameters (swaggerProperties .getGlobalOperationParameters (),
145- docketInfo .getGlobalOperationParameters ()))
146- .groupName (groupName )
171+ docketInfo .getGlobalOperationParameters ()));
172+
173+ // 全局响应消息
174+ if (!swaggerProperties .getApplyDefaultResponseMessages ()) {
175+ buildGlobalResponseMessage (swaggerProperties , docketForBuilder );
176+ }
177+
178+ Docket docket = docketForBuilder .groupName (groupName )
147179 .select ()
148180 .apis (RequestHandlerSelectors .basePackage (docketInfo .getBasePackage ()))
149181 .paths (
@@ -154,17 +186,24 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
154186 )
155187 .build ();
156188
189+ /** ignoredParameterTypes **/
190+ Class [] array = new Class [docketInfo .getIgnoredParameterTypes ().size ()];
191+ Class [] ignoredParameterTypes = docketInfo .getIgnoredParameterTypes ().toArray (array );
192+ docket .ignoredParameterTypes (ignoredParameterTypes );
193+
157194 configurableBeanFactory .registerSingleton (groupName , docket );
158195 docketList .add (docket );
159196 }
160197 return docketList ;
161198 }
162199
200+
163201 @ Override
164202 public void setBeanFactory (BeanFactory beanFactory ) throws BeansException {
165203 this .beanFactory = beanFactory ;
166204 }
167205
206+
168207 private List <Parameter > buildGlobalOperationParametersFromSwaggerProperties (
169208 List <SwaggerProperties .GlobalOperationParameter > globalOperationParameters ) {
170209 List <Parameter > parameters = Lists .newArrayList ();
@@ -216,4 +255,57 @@ private List<Parameter> assemblyGlobalOperationParameters(
216255 resultOperationParameters .addAll (docketOperationParameters );
217256 return buildGlobalOperationParametersFromSwaggerProperties (resultOperationParameters );
218257 }
258+
259+ /**
260+ * 设置全局响应消息
261+ *
262+ * @param swaggerProperties 支持 POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE
263+ * @param docketForBuilder
264+ */
265+ private void buildGlobalResponseMessage (SwaggerProperties swaggerProperties , Docket docketForBuilder ) {
266+
267+ SwaggerProperties .GlobalResponseMessage globalResponseMessages =
268+ swaggerProperties .getGlobalResponseMessage ();
269+
270+ // POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE 响应消息体
271+ List <ResponseMessage > postResponseMessages = getResponseMessageList (globalResponseMessages .getPost ());
272+ List <ResponseMessage > getResponseMessages = getResponseMessageList (globalResponseMessages .getGet ());
273+ List <ResponseMessage > putResponseMessages = getResponseMessageList (globalResponseMessages .getPut ());
274+ List <ResponseMessage > patchResponseMessages = getResponseMessageList (globalResponseMessages .getPatch ());
275+ List <ResponseMessage > deleteResponseMessages = getResponseMessageList (globalResponseMessages .getDelete ());
276+ List <ResponseMessage > headResponseMessages = getResponseMessageList (globalResponseMessages .getHead ());
277+ List <ResponseMessage > optionsResponseMessages = getResponseMessageList (globalResponseMessages .getOptions ());
278+ List <ResponseMessage > trackResponseMessages = getResponseMessageList (globalResponseMessages .getTrace ());
279+
280+ docketForBuilder .useDefaultResponseMessages (swaggerProperties .getApplyDefaultResponseMessages ())
281+ .globalResponseMessage (RequestMethod .POST , postResponseMessages )
282+ .globalResponseMessage (RequestMethod .GET , getResponseMessages )
283+ .globalResponseMessage (RequestMethod .PUT , putResponseMessages )
284+ .globalResponseMessage (RequestMethod .PATCH , patchResponseMessages )
285+ .globalResponseMessage (RequestMethod .DELETE , deleteResponseMessages )
286+ .globalResponseMessage (RequestMethod .HEAD , headResponseMessages )
287+ .globalResponseMessage (RequestMethod .OPTIONS , optionsResponseMessages )
288+ .globalResponseMessage (RequestMethod .TRACE , trackResponseMessages );
289+ }
290+
291+ /**
292+ * 获取返回消息体列表
293+ *
294+ * @param globalResponseMessageBodyList
295+ * @return
296+ */
297+ private List <ResponseMessage > getResponseMessageList (List <SwaggerProperties .GlobalResponseMessageBody > globalResponseMessageBodyList ) {
298+ List <ResponseMessage > responseMessages = new ArrayList <>();
299+ for (SwaggerProperties .GlobalResponseMessageBody globalResponseMessageBody : globalResponseMessageBodyList ) {
300+ ResponseMessageBuilder responseMessageBuilder = new ResponseMessageBuilder ();
301+ responseMessageBuilder .code (globalResponseMessageBody .getCode ()).message (globalResponseMessageBody .getMessage ());
302+
303+ if (!StringUtils .isEmpty (globalResponseMessageBody .getModelRef ())) {
304+ responseMessageBuilder .responseModel (new ModelRef (globalResponseMessageBody .getModelRef ()));
305+ }
306+ responseMessages .add (responseMessageBuilder .build ());
307+ }
308+
309+ return responseMessages ;
310+ }
219311}
0 commit comments