Skip to content

Commit 3e5b773

Browse files
author
bnasslahsen
committed
Improve support of Webflux with Functional Endpoints
1 parent f0dedd5 commit 3e5b773

File tree

5 files changed

+55
-57
lines changed

5 files changed

+55
-57
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/core/models/RouterFunctionData.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Set;
44

5+
import org.apache.commons.lang3.ArrayUtils;
56
import org.apache.commons.lang3.StringUtils;
67

78
import org.springframework.http.HttpMethod;
@@ -20,9 +21,6 @@ public class RouterFunctionData {
2021

2122
private RequestMethod[] methods;
2223

23-
public RouterFunctionData() {
24-
}
25-
2624
public String getPath() {
2725
return path;
2826
}
@@ -78,9 +76,9 @@ public void setConsumes(String consumes) {
7876
}
7977
private RequestMethod[] getMethod(Set<HttpMethod> methods) {
8078
if (!CollectionUtils.isEmpty(methods)) {
81-
return methods.stream().map(httpMethod -> getRequestMethod(httpMethod)).toArray(RequestMethod[]::new);
79+
return methods.stream().map(this::getRequestMethod).toArray(RequestMethod[]::new);
8280
}
83-
return null;
81+
return ArrayUtils.toArray();
8482
}
8583

8684
private RequestMethod getRequestMethod(HttpMethod httpMethod) {

springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiResource.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import org.springframework.web.bind.annotation.RequestMethod;
5555
import org.springframework.web.bind.annotation.RestController;
5656
import org.springframework.web.method.HandlerMethod;
57-
import org.springframework.web.reactive.HandlerMapping;
5857
import org.springframework.web.reactive.function.server.RouterFunction;
5958
import org.springframework.web.reactive.result.condition.PatternsRequestCondition;
6059
import org.springframework.web.reactive.result.method.RequestMappingInfo;
@@ -72,9 +71,6 @@ public class OpenApiResource extends AbstractOpenApiResource {
7271

7372
private final RequestMappingInfoHandlerMapping requestMappingHandlerMapping;
7473

75-
@Autowired
76-
private List<HandlerMapping> handlerMappings;
77-
7874
public OpenApiResource(String groupName, OpenAPIBuilder openAPIBuilder, AbstractRequestBuilder requestBuilder,
7975
GenericResponseBuilder responseBuilder, OperationBuilder operationParser,
8076
RequestMappingInfoHandlerMapping requestMappingHandlerMapping,
@@ -134,10 +130,10 @@ protected void getPaths(Map<String, Object> restControllers) {
134130
}
135131
}
136132
}
137-
getRouterFunctionPaths();
133+
getWebFluxRouterFunctionPaths();
138134
}
139135

140-
private void getRouterFunctionPaths() {
136+
private void getWebFluxRouterFunctionPaths() {
141137
ApplicationContext applicationContext = requestMappingHandlerMapping.getApplicationContext();
142138
Map<String, RouterFunction> routerBeans = applicationContext.getBeansOfType(RouterFunction.class);
143139
for (Map.Entry<String, RouterFunction> entry : routerBeans.entrySet()) {
@@ -155,7 +151,7 @@ private void getRouterFunctionPaths() {
155151
if (routerOperationList.size() == 1)
156152
calculatePath(routerOperationList.stream().map(routerOperation -> new org.springdoc.core.models.RouterOperation(routerOperation, routerFunctionVisitor.getRouterFunctionDatas().get(0))).collect(Collectors.toList()));
157153
else {
158-
List<org.springdoc.core.models.RouterOperation> operationList = routerOperationList.stream().map(routerOperation -> new org.springdoc.core.models.RouterOperation(routerOperation)).collect(Collectors.toList());
154+
List<org.springdoc.core.models.RouterOperation> operationList = routerOperationList.stream().map(org.springdoc.core.models.RouterOperation::new).collect(Collectors.toList());
159155
merge(routerFunctionVisitor.getRouterFunctionDatas(), operationList);
160156
calculatePath(operationList);
161157
}

springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/RouterFunctionVisitor.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,8 @@ public class RouterFunctionVisitor implements RouterFunctions.Visitor, RequestPr
2424

2525
private RouterFunctionData routerFunctionData;
2626

27-
private RequestPredicate routePredicate;
28-
29-
private HandlerFunction<?> routeHandlerFunction;
30-
3127
@Override
3228
public void route(RequestPredicate predicate, HandlerFunction<?> handlerFunction) {
33-
this.routePredicate = predicate;
34-
this.routeHandlerFunction = handlerFunction;
3529
this.routerFunctionData = new RouterFunctionData();
3630
routerFunctionDatas.add(this.routerFunctionData);
3731
predicate.accept(this);
@@ -62,63 +56,78 @@ public List<RouterFunctionData> getRouterFunctionDatas() {
6256

6357
@Override
6458
public void startNested(RequestPredicate predicate) {
59+
// Not yet needed
6560
}
6661

6762
@Override
6863
public void endNested(RequestPredicate predicate) {
64+
// Not yet needed
6965
}
7066

7167
@Override
7268
public void resources(Function<ServerRequest, Mono<Resource>> lookupFunction) {
69+
// Not yet needed
7370
}
7471

7572
@Override
7673
public void unknown(RouterFunction<?> routerFunction) {
74+
// Not yet needed
7775
}
7876

7977
@Override
8078
public void pathExtension(String extension) {
79+
// Not yet needed
8180
}
8281

8382

8483
@Override
8584
public void queryParam(String name, String value) {
85+
// Not yet needed
8686
}
8787

8888
@Override
8989
public void startAnd() {
90+
// Not yet needed
9091
}
9192

9293
@Override
9394
public void and() {
95+
// Not yet needed
9496
}
9597

9698
@Override
9799
public void endAnd() {
100+
// Not yet needed
98101
}
99102

100103
@Override
101104
public void startOr() {
105+
// Not yet needed
102106
}
103107

104108
@Override
105109
public void or() {
110+
// Not yet needed
106111
}
107112

108113
@Override
109114
public void endOr() {
115+
// Not yet needed
110116
}
111117

112118
@Override
113119
public void startNegate() {
120+
// Not yet needed
114121
}
115122

116123
@Override
117124
public void endNegate() {
125+
// Not yet needed
118126
}
119127

120128
@Override
121129
public void unknown(RequestPredicate predicate) {
130+
// Not yet needed
122131
}
123132

124133
}

springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiResource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,10 @@ && isPathToMatch(operationPath)) {
167167
}
168168
}
169169
}
170-
getRouterFunctionPaths();
170+
getWebMvcRouterFunctionPaths();
171171
}
172172

173-
private void getRouterFunctionPaths() {
173+
private void getWebMvcRouterFunctionPaths() {
174174
ApplicationContext applicationContext = requestMappingHandlerMapping.getApplicationContext();
175175
Map<String, RouterFunction> routerBeans = applicationContext.getBeansOfType(RouterFunction.class);
176176
for (Map.Entry<String, RouterFunction> entry : routerBeans.entrySet()) {
@@ -188,7 +188,7 @@ private void getRouterFunctionPaths() {
188188
if (routerOperationList.size() == 1)
189189
calculatePath(routerOperationList.stream().map(routerOperation -> new org.springdoc.core.models.RouterOperation(routerOperation, routerFunctionVisitor.getRouterFunctionDatas().get(0))).collect(Collectors.toList()));
190190
else {
191-
List<org.springdoc.core.models.RouterOperation> operationList = routerOperationList.stream().map(routerOperation -> new org.springdoc.core.models.RouterOperation(routerOperation)).collect(Collectors.toList());
191+
List<org.springdoc.core.models.RouterOperation> operationList = routerOperationList.stream().map(org.springdoc.core.models.RouterOperation::new).collect(Collectors.toList());
192192
merge(routerFunctionVisitor.getRouterFunctionDatas(), operationList);
193193
calculatePath(operationList);
194194
}

springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/RouterFunctionVisitor.java

Lines changed: 31 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,29 +24,13 @@ public class RouterFunctionVisitor implements RouterFunctions.Visitor, RequestPr
2424

2525
private RouterFunctionData routerFunctionData;
2626

27-
private RequestPredicate routePredicate;
28-
29-
private HandlerFunction<?> routeHandlerFunction;
30-
3127
@Override
3228
public void route(RequestPredicate predicate, HandlerFunction<?> handlerFunction) {
33-
this.routePredicate = predicate;
34-
this.routeHandlerFunction = handlerFunction;
3529
this.routerFunctionData = new RouterFunctionData();
3630
routerFunctionDatas.add(this.routerFunctionData);
3731
predicate.accept(this);
3832
}
3933

40-
@Override
41-
public void resources(Function<ServerRequest, Optional<Resource>> lookupFunction) {
42-
43-
}
44-
45-
@Override
46-
public void unknown(RouterFunction<?> routerFunction) {
47-
48-
}
49-
5034
@Override
5135
public void method(Set<HttpMethod> methods) {
5236
routerFunctionData.setMethods(methods);
@@ -57,11 +41,6 @@ public void path(String pattern) {
5741
routerFunctionData.setPath(pattern);
5842
}
5943

60-
@Override
61-
public void pathExtension(String extension) {
62-
63-
}
64-
6544
@Override
6645
public void header(String name, String value) {
6746
if (HttpHeaders.ACCEPT.equals(name))
@@ -70,67 +49,83 @@ public void header(String name, String value) {
7049
routerFunctionData.setHeaders(name + "=" + value);
7150
}
7251

52+
public List<RouterFunctionData> getRouterFunctionDatas() {
53+
return routerFunctionDatas;
54+
}
55+
7356
@Override
74-
public void param(String name, String value) {
57+
public void resources(Function<ServerRequest, Optional<Resource>> lookupFunction) {
58+
// Not yet needed
59+
}
7560

61+
@Override
62+
public void unknown(RouterFunction<?> routerFunction) {
63+
// Not yet needed
7664
}
7765

7866
@Override
79-
public void startAnd() {
67+
public void pathExtension(String extension) {
68+
// Not yet needed
69+
}
70+
71+
@Override
72+
public void param(String name, String value) {
73+
// Not yet needed
74+
}
8075

76+
@Override
77+
public void startAnd() {
78+
// Not yet needed
8179
}
8280

8381
@Override
8482
public void and() {
85-
83+
// Not yet needed
8684
}
8785

8886
@Override
8987
public void endAnd() {
90-
88+
// Not yet needed
9189
}
9290

9391
@Override
9492
public void startOr() {
95-
93+
// Not yet needed
9694
}
9795

9896
@Override
9997
public void or() {
100-
98+
// Not yet needed
10199
}
102100

103101
@Override
104102
public void endOr() {
105-
103+
// Not yet needed
106104
}
107105

108106
@Override
109107
public void startNegate() {
110-
108+
// Not yet needed
111109
}
112110

113111
@Override
114112
public void endNegate() {
115-
113+
// Not yet needed
116114
}
117115

118116
@Override
119117
public void unknown(RequestPredicate predicate) {
120-
118+
// Not yet needed
121119
}
122120

123-
public List<RouterFunctionData> getRouterFunctionDatas() {
124-
return routerFunctionDatas;
125-
}
126-
127-
128121
@Override
129122
public void startNested(RequestPredicate predicate) {
123+
// Not yet needed
130124
}
131125

132126
@Override
133127
public void endNested(RequestPredicate predicate) {
128+
// Not yet needed
134129
}
135130

136131

0 commit comments

Comments
 (0)