Skip to content

Commit 2546511

Browse files
authored
fix: stops reprocessing parameters extracted from nested BeanParam Fixes: #3973 #4334
1 parent 23d2971 commit 2546511

File tree

5 files changed

+118
-51
lines changed

5 files changed

+118
-51
lines changed

modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -258,36 +258,17 @@ private boolean handleAdditionalAnnotation(List<Parameter> parameters, List<Para
258258
resolvedParameter.parameters;
259259

260260
for (Parameter p : extractedParameters) {
261-
Parameter processedParam = ParameterProcessor.applyAnnotations(
262-
p,
263-
paramType,
264-
paramAnnotations,
265-
components,
266-
classConsumes == null ? new String[0] : classConsumes.value(),
267-
methodConsumes == null ? new String[0] : methodConsumes.value(),
268-
jsonViewAnnotation,
269-
configuration);
270-
if (processedParam != null) {
271-
parameters.add(processedParam);
261+
if (p != null) {
262+
parameters.add(p);
272263
}
273264
}
274265

275266
List<Parameter> extractedFormParameters =
276267
resolvedParameter.formParameters;
277268

278269
for (Parameter p : extractedFormParameters) {
279-
Parameter processedParam = ParameterProcessor.applyAnnotations(
280-
p,
281-
paramType,
282-
paramAnnotations,
283-
components,
284-
classConsumes == null ? new String[0] : classConsumes.value(),
285-
methodConsumes == null ? new String[0] : methodConsumes.value(),
286-
jsonViewAnnotation,
287-
openapi31,
288-
this.schemaResolution);
289-
if (processedParam != null) {
290-
formParameters.add(processedParam);
270+
if (p != null) {
271+
formParameters.add(p);
291272
}
292273
}
293274

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/BeanParamTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import javax.ws.rs.GET;
77
import javax.ws.rs.Path;
88

9+
import io.swagger.v3.jaxrs2.resources.model.NestedBeanParam;
10+
import io.swagger.v3.oas.models.media.IntegerSchema;
11+
import org.testng.Assert;
912
import org.testng.annotations.Test;
1013

1114
import io.swagger.v3.jaxrs2.resources.model.ListOfStringsBeanParam;
@@ -24,6 +27,13 @@ private static class MyBeanParamResource {
2427
public String getWithBeanParam(@BeanParam ListOfStringsBeanParam listOfStringsBean) {
2528
return "result";
2629
}
30+
31+
@GET
32+
@Path("/nested-param")
33+
public String getWithNestedBeanParam(@BeanParam NestedBeanParam listOfStringsBean) {
34+
return "result";
35+
}
36+
2737
}
2838

2939
@Test(description = "check array type of serialized BeanParam containing QueryParams") // tests issue #2466
@@ -39,4 +49,18 @@ public void shouldSerializeTypeParameter() {
3949
assertEquals(schema.getItems().getType(), "string");
4050
}
4151

52+
@Test(description = "check integer type of nested BeanParam containing a QueryParam") // tests issue #2466
53+
public void shouldSerializeNestedTypeParameter() {
54+
OpenAPI openApi = new Reader(new OpenAPI()).read(MyBeanParamResource.class);
55+
List<Parameter> getOperationParams = openApi.getPaths().get("/nested-param").getGet().getParameters();
56+
Assert.assertEquals(getOperationParams.size(), 1);
57+
58+
Parameter queryParam = getOperationParams.get(0);
59+
Assert.assertEquals(queryParam.getName(), "queryParam");
60+
Schema<?> schema = queryParam.getSchema();
61+
Assert.assertEquals(schema.getClass(), IntegerSchema.class);
62+
Assert.assertEquals(schema.getType(), "integer");
63+
Assert.assertEquals(((IntegerSchema) schema).getDefault(), 10);
64+
}
65+
4266
}
Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,20 @@
11
package io.swagger.v3.jaxrs2;
22

3+
import io.swagger.v3.jaxrs2.resources.model.FormParamBean;
34
import io.swagger.v3.oas.models.OpenAPI;
45
import io.swagger.v3.oas.models.media.MediaType;
56
import io.swagger.v3.oas.models.media.Schema;
67
import io.swagger.v3.oas.models.media.StringSchema;
78
import io.swagger.v3.oas.models.parameters.RequestBody;
9+
import org.testng.Assert;
810
import org.testng.annotations.Test;
911

1012
import javax.ws.rs.*;
1113

12-
import static org.testng.Assert.assertEquals;
1314
import static org.testng.Assert.assertNotNull;
1415

1516
public class FormParamBeanTest {
1617

17-
private static class FormParamBean {
18-
@FormParam(value = "param1")
19-
private String param1;
20-
21-
@FormParam(value = "param2")
22-
private String param2;
23-
24-
public String getParam1() {
25-
return param1;
26-
}
27-
28-
public void setParam1(String param1) {
29-
this.param1 = param1;
30-
}
31-
32-
public String getParam2() {
33-
return param2;
34-
}
35-
36-
public void setParam2(String param2) {
37-
this.param2 = param2;
38-
}
39-
}
40-
4118
@Path("/")
4219
private static class MyFormBeanParamResource {
4320
@GET
@@ -55,9 +32,10 @@ public void shouldSerializeTypeParameter() {
5532
MediaType mediaType = requestBody.getContent().get("application/x-www-form-urlencoded");
5633
assertNotNull(mediaType);
5734
Schema schema = mediaType.getSchema();
58-
assertEquals(schema.getProperties().size(), 2);
59-
assertEquals(schema.getProperties().get("param1"), new StringSchema());
60-
assertEquals(schema.getProperties().get("param2"), new StringSchema());
35+
Assert.assertEquals(schema.getProperties().size(), 3);
36+
Assert.assertEquals(schema.getProperties().get("param1"), new StringSchema());
37+
Assert.assertEquals(schema.getProperties().get("param2"), new StringSchema());
38+
Assert.assertEquals(schema.getProperties().get("param3"), new StringSchema());
6139
}
6240

6341
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.swagger.v3.jaxrs2.resources.model;
2+
3+
import javax.ws.rs.BeanParam;
4+
import javax.ws.rs.FormParam;
5+
6+
public class FormParamBean {
7+
8+
@FormParam(value = "param1")
9+
private String param1;
10+
11+
@FormParam(value = "param2")
12+
private String param2;
13+
14+
@BeanParam
15+
private NestedBeanParam nestedParams;
16+
17+
public String getParam1() {
18+
return param1;
19+
}
20+
21+
public void setParam1(String param1) {
22+
this.param1 = param1;
23+
}
24+
25+
public String getParam2() {
26+
return param2;
27+
}
28+
29+
public void setParam2(String param2) {
30+
this.param2 = param2;
31+
}
32+
33+
public NestedBeanParam getNestedParams() {
34+
return nestedParams;
35+
}
36+
37+
public void setNestedParams(final NestedBeanParam nestedParams) {
38+
this.nestedParams = nestedParams;
39+
}
40+
41+
private static class NestedBeanParam {
42+
@FormParam(value = "param3")
43+
private String param3;
44+
public String getParam3() {
45+
return param3;
46+
}
47+
48+
public void setParam3(String param3) {
49+
this.param3 = param3;
50+
}
51+
}
52+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.swagger.v3.jaxrs2.resources.model;
2+
3+
import javax.ws.rs.BeanParam;
4+
import javax.ws.rs.DefaultValue;
5+
import javax.ws.rs.QueryParam;
6+
7+
public class NestedBeanParam {
8+
9+
@BeanParam
10+
private NestedClass nestedParams;
11+
12+
public NestedClass getNestedParams() {
13+
return nestedParams;
14+
}
15+
16+
public void setNestedParams(final NestedClass nestedParams) {
17+
this.nestedParams = nestedParams;
18+
}
19+
20+
public class NestedClass {
21+
@QueryParam(value = "queryParam")
22+
@DefaultValue("10")
23+
private Integer queryParam = 10;
24+
public Integer getQueryParam() {
25+
return queryParam;
26+
}
27+
28+
public void setQueryParam(final Integer queryParam) {
29+
this.queryParam = queryParam;
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)