Skip to content

Commit 57c02fd

Browse files
committed
openapi: remove path parameter when generating operations from optional params
1 parent 11fe61c commit 57c02fd

File tree

6 files changed

+35
-25
lines changed

6 files changed

+35
-25
lines changed

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/AnnotationParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ enum ParamType {
8686

8787
@Override public void setIn(Parameter parameter) {
8888
parameter.setIn("path");
89+
parameter.setRequired(true);
8990
}
9091
},
9192
QUERY {

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/OperationExt.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.fasterxml.jackson.annotation.JsonIgnore;
99
import io.jooby.MediaType;
10+
import io.jooby.Router;
1011
import io.swagger.v3.oas.models.parameters.Parameter;
1112
import io.swagger.v3.oas.models.responses.ApiResponses;
1213
import io.swagger.v3.oas.models.tags.Tag;
@@ -221,7 +222,19 @@ public OperationExt copy(String pattern) {
221222
OperationExt copy = new OperationExt(node, method, pattern, getParameters(), defaultResponse);
222223
copy.setTags(getTags());
223224
copy.setResponses(getResponses());
224-
copy.setParameters(getParameters());
225+
226+
/** Redo path keys: */
227+
List<String> keys = Router.pathKeys(pattern);
228+
List<Parameter> newParameters = new ArrayList<>();
229+
List<Parameter> parameters = getParameters();
230+
for (String key : keys) {
231+
parameters.stream()
232+
.filter(p -> p.getName().equals(key))
233+
.findFirst()
234+
.ifPresent(newParameters::add);
235+
}
236+
copy.setParameters(newParameters);
237+
225238
copy.setRequestBody(getRequestBody());
226239
copy.setHidden(getHidden());
227240
copy.setMethod(getMethod());

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/ParameterExt.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public void setDefaultValue(Object defaultValue) {
4848
this.defaultValue = defaultValue;
4949
}
5050

51+
@Override public void setRequired(Boolean required) {
52+
super.setRequired(required);
53+
}
54+
5155
@Override public String toString() {
5256
return javaType + " " + getName();
5357
}

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/RequestParser.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,12 @@ public static List<ParameterExt> parameters(MethodNode node) {
194194
Signature signature = Signature.create(methodInsnNode);
195195
ParameterExt argument = new ParameterExt();
196196
String scope = signature.getMethod();
197+
Boolean required = null;
197198
switch (scope) {
199+
case "path":
200+
required = true;
198201
case "header":
199202
case "cookie":
200-
case "path":
201203
case "query": {
202204
argument.setIn(scope);
203205
if (signature.matches(String.class)) {
@@ -211,7 +213,9 @@ public static List<ParameterExt> parameters(MethodNode node) {
211213
}
212214
}
213215
}
214-
216+
if (required != null) {
217+
argument.setRequired(required);
218+
}
215219
if (argument.getJavaType() != null) {
216220
args.add(argument);
217221
} else {

modules/jooby-openapi/src/test/java/io/jooby/openapi/OpenAPIGeneratorTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -309,71 +309,71 @@ public void routePathArguments(RouteIterator iterator) {
309309
assertEquals("java.util.List<java.lang.String>", it.getJavaType());
310310
assertEquals("listStr", it.getName());
311311
assertNull(it.getDefaultValue());
312-
assertFalse(it.getRequired());
312+
assertTrue(it.getRequired());
313313
assertTrue(it.isSingle());
314314
assertEquals("path", it.getIn());
315315
})
316316
.next(it -> {
317317
assertEquals("java.util.List<java.lang.Double>", it.getJavaType());
318318
assertEquals("listType", it.getName());
319319
assertNull(it.getDefaultValue());
320-
assertFalse(it.getRequired());
320+
assertTrue(it.getRequired());
321321
assertTrue(it.isSingle());
322322
assertEquals("path", it.getIn());
323323
})
324324
.next(it -> {
325325
assertEquals(String.class.getName(), it.getJavaType());
326326
assertEquals("defstr", it.getName());
327327
assertEquals("200", it.getDefaultValue());
328-
assertFalse(it.getRequired());
328+
assertTrue(it.getRequired());
329329
assertTrue(it.isSingle());
330330
assertEquals("path", it.getIn());
331331
})
332332
.next(it -> {
333333
assertEquals(int.class.getName(), it.getJavaType());
334334
assertEquals("defint", it.getName());
335335
assertEquals(87, it.getDefaultValue());
336-
assertFalse(it.getRequired());
336+
assertTrue(it.getRequired());
337337
assertTrue(it.isSingle());
338338
assertEquals("path", it.getIn());
339339
})
340340
.next(it -> {
341341
assertEquals(int.class.getName(), it.getJavaType());
342342
assertEquals("defint0", it.getName());
343343
assertEquals(0, it.getDefaultValue());
344-
assertFalse(it.getRequired());
344+
assertTrue(it.getRequired());
345345
assertTrue(it.isSingle());
346346
assertEquals("path", it.getIn());
347347
})
348348
.next(it -> {
349349
assertEquals(boolean.class.getName(), it.getJavaType());
350350
assertEquals("defbool", it.getName());
351351
assertEquals(true, it.getDefaultValue());
352-
assertFalse(it.getRequired());
352+
assertTrue(it.getRequired());
353353
assertTrue(it.isSingle());
354354
assertEquals("path", it.getIn());
355355
})
356356
.next(it -> {
357357
assertEquals("java.util.Optional<java.lang.String>", it.getJavaType());
358358
assertEquals("optstr", it.getName());
359359
assertEquals(null, it.getDefaultValue());
360-
assertFalse(it.getRequired());
360+
assertTrue(it.getRequired());
361361
assertTrue(it.isSingle());
362362
assertEquals("path", it.getIn());
363363
})
364364
.next(it -> {
365365
assertEquals("java.util.Optional<java.lang.Integer>", it.getJavaType());
366366
assertEquals("optint", it.getName());
367367
assertEquals(null, it.getDefaultValue());
368-
assertFalse(it.getRequired());
368+
assertTrue(it.getRequired());
369369
assertTrue(it.isSingle());
370370
assertEquals("path", it.getIn());
371371
})
372372
.next(it -> {
373373
assertEquals("java.util.Optional<java.lang.String>", it.getJavaType());
374374
assertEquals("optstr2", it.getName());
375375
assertEquals("optional", it.getDefaultValue());
376-
assertFalse(it.getRequired());
376+
assertTrue(it.getRequired());
377377
assertTrue(it.isSingle());
378378
assertEquals("path", it.getIn());
379379
})

modules/jooby-openapi/src/test/java/issues/Issue1573.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ public void shouldGenerateExpandPaths(OpenAPIResult result) {
1818
+ " /profile:\n"
1919
+ " get:\n"
2020
+ " operationId: getProfile\n"
21-
+ " parameters:\n"
22-
+ " - name: id\n"
23-
+ " in: path\n"
24-
+ " required: false\n"
25-
+ " schema:\n"
26-
+ " type: string\n"
2721
+ " responses:\n"
2822
+ " \"200\":\n"
2923
+ " description: Success\n"
@@ -37,7 +31,7 @@ public void shouldGenerateExpandPaths(OpenAPIResult result) {
3731
+ " parameters:\n"
3832
+ " - name: id\n"
3933
+ " in: path\n"
40-
+ " required: false\n"
34+
+ " required: true\n"
4135
+ " schema:\n"
4236
+ " type: string\n"
4337
+ " responses:\n"
@@ -50,12 +44,6 @@ public void shouldGenerateExpandPaths(OpenAPIResult result) {
5044
+ " /c/profile:\n"
5145
+ " get:\n"
5246
+ " operationId: profile\n"
53-
+ " parameters:\n"
54-
+ " - name: id\n"
55-
+ " in: path\n"
56-
+ " required: true\n"
57-
+ " schema:\n"
58-
+ " type: string\n"
5947
+ " responses:\n"
6048
+ " \"200\":\n"
6149
+ " description: Success\n"

0 commit comments

Comments
 (0)