77import org .springframework .web .servlet .mvc .method .annotation .RequestMappingHandlerMapping ;
88
99import java .lang .reflect .Method ;
10- import java .util .Map ;
10+ import java .util .*;
11+ import java .util .stream .Collectors ;
1112
1213/**
1314 * @author CC11001100
@@ -21,11 +22,26 @@ public class SpringMVCApiExtractor {
2122 * @param applicationContext
2223 * @return
2324 */
24- public static OpenApi run (Object applicationContext ) {
25+ public static List < OpenApi > run (Object applicationContext ) {
2526 WebApplicationContext webApplicationContext = (WebApplicationContext ) applicationContext ;
2627 SpringMVCApiExtractor springApplicationContext = new SpringMVCApiExtractor ();
27- RequestMappingHandlerMapping requestMappingHandlerMapping = springApplicationContext .findRequestMappingHandlerMapping (webApplicationContext );
28- return new RequestMappingHandlerMappingConvertor (webApplicationContext , requestMappingHandlerMapping ).parse ();
28+ List <RequestMappingHandlerMapping > requestMappingHandlerMappingList = springApplicationContext .findRequestMappingHandlerMapping (webApplicationContext );
29+ if (requestMappingHandlerMappingList == null || requestMappingHandlerMappingList .isEmpty ()) {
30+ DongTaiLog .debug ("spring mvc can not find RequestMappingHandlerMapping beans" );
31+ return null ;
32+ }
33+ return requestMappingHandlerMappingList
34+ .stream ()
35+ .map (mapping -> {
36+ try {
37+ return new RequestMappingHandlerMappingConvertor (webApplicationContext , mapping ).parse ();
38+ } catch (Throwable e ) {
39+ DongTaiLog .debug ("spring mvc RequestMappingHandlerMappingConvertor parse error" , e );
40+ return null ;
41+ }
42+ })
43+ .filter (Objects ::nonNull )
44+ .collect (Collectors .toList ());
2945 }
3046
3147 /**
@@ -34,7 +50,7 @@ public static OpenApi run(Object applicationContext) {
3450 * @param applicationContext
3551 * @return
3652 */
37- private RequestMappingHandlerMapping findRequestMappingHandlerMapping (WebApplicationContext applicationContext ) {
53+ private List < RequestMappingHandlerMapping > findRequestMappingHandlerMapping (WebApplicationContext applicationContext ) {
3854
3955 if (applicationContext == null ) {
4056 return null ;
@@ -52,15 +68,23 @@ private RequestMappingHandlerMapping findRequestMappingHandlerMapping(WebApplica
5268 Map <String , RequestMappingHandlerMapping > m = (Map <String , RequestMappingHandlerMapping >) invoke ;
5369 RequestMappingHandlerMapping requestMappingHandlerMapping = m .get ("requestMappingHandlerMapping" );
5470 if (requestMappingHandlerMapping != null ) {
55- return requestMappingHandlerMapping ;
71+ return Collections . singletonList ( requestMappingHandlerMapping ) ;
5672 }
5773 }
5874 } catch (Throwable e ) {
5975 DongTaiLog .debug ("try use BeanFactoryUtils find RequestMappingHandlerMapping exception" , e );
6076 }
6177
6278 // 没有工具类,就只从自己里面找
63- return applicationContext .getBean (RequestMappingHandlerMapping .class );
79+ // 2023-7-11 16:58:23 注意,此处可能会寻找到多个,寻找到多个的时候统统上报
80+ // case:
81+ // <dependency>
82+ // <groupId>io.springfox</groupId>
83+ // <artifactId>springfox-swagger2</artifactId>
84+ // <version>2.7.0</version>
85+ // </dependency>
86+ // 它会创建一个自己的 springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping 继承了 RequestMappingHandlerMapping
87+ return new ArrayList <>(applicationContext .getBeansOfType (RequestMappingHandlerMapping .class ).values ());
6488 }
6589
6690}
0 commit comments