|
34 | 34 | import java.util.Objects; |
35 | 35 | import java.util.Optional; |
36 | 36 | import java.util.Set; |
| 37 | +import java.util.concurrent.atomic.AtomicReference; |
| 38 | +import java.util.function.Consumer; |
37 | 39 | import java.util.stream.Collectors; |
38 | 40 | import java.util.stream.Stream; |
39 | 41 |
|
@@ -201,16 +203,23 @@ private static List<OperationExt> routerMethod(ParserContext ctx, String prefix, |
201 | 203 | ClassNode classNode, MethodNode method) { |
202 | 204 | List<OperationExt> result = new ArrayList<>(); |
203 | 205 |
|
204 | | - List<ParameterExt> arguments = routerArguments(method); |
| 206 | + AtomicReference<RequestBodyExt> requestBody = new AtomicReference<>(); |
| 207 | + List<ParameterExt> arguments = routerArguments(method, requestBody::set); |
205 | 208 | List<ResponseExt> returnTypes = returnTypes(method); |
206 | 209 |
|
207 | 210 | for (String httpMethod : httpMethod(method.visibleAnnotations)) { |
208 | 211 | for (String pattern : httpPattern(classNode, method, httpMethod)) { |
209 | | - OperationExt operation = new OperationExt(method, httpMethod, RoutePath.path(prefix, pattern), |
| 212 | + OperationExt operation = new OperationExt( |
| 213 | + method, |
| 214 | + httpMethod, |
| 215 | + RoutePath.path(prefix, pattern), |
210 | 216 | arguments, |
211 | | - returnTypes); |
| 217 | + returnTypes |
| 218 | + ); |
212 | 219 | operation.setOperationId(method.name); |
213 | 220 | operation.setDeprecated(isDeprecated(method.visibleAnnotations)); |
| 221 | + Optional.ofNullable(requestBody.get()).ifPresent(operation::setRequestBody); |
| 222 | + |
214 | 223 | result.add(operation); |
215 | 224 | } |
216 | 225 | } |
@@ -246,7 +255,8 @@ private static List<ResponseExt> returnTypes(MethodNode method) { |
246 | 255 | return result; |
247 | 256 | } |
248 | 257 |
|
249 | | - private static List<ParameterExt> routerArguments(MethodNode method) { |
| 258 | + private static List<ParameterExt> routerArguments(MethodNode method, |
| 259 | + Consumer<RequestBodyExt> requestBody) { |
250 | 260 | List<ParameterExt> result = new ArrayList<>(); |
251 | 261 | if (method.parameters != null) { |
252 | 262 | for (int i = 0; i < method.parameters.size(); i++) { |
@@ -288,13 +298,19 @@ private static List<ParameterExt> routerArguments(MethodNode method) { |
288 | 298 | ? true |
289 | 299 | : !isNullable(method, i);//!javaType.startsWith("java.util.Optional"); |
290 | 300 |
|
291 | | - ParameterExt argument = new ParameterExt(); |
292 | | - argument.setName(paramType.getHttpName(annotations).orElse(parameter.name)); |
293 | | - argument.setJavaType(javaType); |
294 | | - paramType.setIn(argument); |
295 | | - argument.setRequired(required); |
296 | | - |
297 | | - result.add(argument); |
| 301 | + if (paramType == ParamType.BODY) { |
| 302 | + RequestBodyExt body = new RequestBodyExt(); |
| 303 | + body.setRequired(required); |
| 304 | + body.setJavaType(javaType); |
| 305 | + requestBody.accept(body); |
| 306 | + } else { |
| 307 | + ParameterExt argument = new ParameterExt(); |
| 308 | + argument.setName(paramType.getHttpName(annotations).orElse(parameter.name)); |
| 309 | + argument.setJavaType(javaType); |
| 310 | + paramType.setIn(argument); |
| 311 | + argument.setRequired(required); |
| 312 | + result.add(argument); |
| 313 | + } |
298 | 314 | } |
299 | 315 | } |
300 | 316 | return result; |
|
0 commit comments