From 86c64deaeb10bcaa2aa8aeabd86f2d4c79354900 Mon Sep 17 00:00:00 2001 From: Author Name Date: Wed, 4 Jan 2023 14:52:30 -0300 Subject: [PATCH] fix: stops reprocessing parameters extracted from nested BeanParam --- .../v3/jaxrs2/DefaultParameterExtension.java | 24 ++------- .../io/swagger/v3/jaxrs2/BeanParamTest.java | 25 ++++++++- .../swagger/v3/jaxrs2/FormParamBeanTest.java | 28 ++-------- .../jaxrs2/resources/model/FormParamBean.java | 52 +++++++++++++++++++ .../resources/model/NestedBeanParam.java | 32 ++++++++++++ 5 files changed, 115 insertions(+), 46 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/FormParamBean.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/NestedBeanParam.java diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java index f6493581c8..e55d5e66ba 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java @@ -256,16 +256,8 @@ private boolean handleAdditionalAnnotation(List parameters, List parameters, List schema = param.getSchema(); // These are the important checks: Assert.assertEquals(schema.getClass(), ArraySchema.class); - Assert.assertEquals(((ArraySchema) schema).getItems().getType(), "string"); + Assert.assertEquals(((ArraySchema) schema).getItems().getType(), "string"); + } + + @Test(description = "check integer type of nested BeanParam containing a QueryParam") // tests issue #2466 + public void shouldSerializeNestedTypeParameter() { + OpenAPI openApi = new Reader(new OpenAPI()).read(MyBeanParamResource.class); + List getOperationParams = openApi.getPaths().get("/nested-param").getGet().getParameters(); + Assert.assertEquals(getOperationParams.size(), 1); + + Parameter queryParam = getOperationParams.get(0); + Assert.assertEquals(queryParam.getName(), "queryParam"); + Schema schema = queryParam.getSchema(); + Assert.assertEquals(schema.getClass(), IntegerSchema.class); + Assert.assertEquals(schema.getType(), "integer"); + Assert.assertEquals(((IntegerSchema) schema).getDefault(), 10); } } \ No newline at end of file diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/FormParamBeanTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/FormParamBeanTest.java index eb8246ed23..d5073f90b5 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/FormParamBeanTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/FormParamBeanTest.java @@ -1,5 +1,6 @@ package io.swagger.v3.jaxrs2; +import io.swagger.v3.jaxrs2.resources.model.FormParamBean; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.MediaType; import io.swagger.v3.oas.models.media.Schema; @@ -12,30 +13,6 @@ public class FormParamBeanTest { - private static class FormParamBean { - @FormParam(value = "param1") - private String param1; - - @FormParam(value = "param2") - private String param2; - - public String getParam1() { - return param1; - } - - public void setParam1(String param1) { - this.param1 = param1; - } - - public String getParam2() { - return param2; - } - - public void setParam2(String param2) { - this.param2 = param2; - } - } - @Path("/") private static class MyFormBeanParamResource { @GET @@ -53,9 +30,10 @@ public void shouldSerializeTypeParameter() { MediaType mediaType = requestBody.getContent().get("application/x-www-form-urlencoded"); Assert.assertNotNull(mediaType); Schema schema = mediaType.getSchema(); - Assert.assertEquals(schema.getProperties().size(), 2); + Assert.assertEquals(schema.getProperties().size(), 3); Assert.assertEquals(schema.getProperties().get("param1"), new StringSchema()); Assert.assertEquals(schema.getProperties().get("param2"), new StringSchema()); + Assert.assertEquals(schema.getProperties().get("param3"), new StringSchema()); } } \ No newline at end of file diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/FormParamBean.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/FormParamBean.java new file mode 100644 index 0000000000..f1df860a99 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/FormParamBean.java @@ -0,0 +1,52 @@ +package io.swagger.v3.jaxrs2.resources.model; + +import javax.ws.rs.BeanParam; +import javax.ws.rs.FormParam; + +public class FormParamBean { + + @FormParam(value = "param1") + private String param1; + + @FormParam(value = "param2") + private String param2; + + @BeanParam + private NestedBeanParam nestedParams; + + public String getParam1() { + return param1; + } + + public void setParam1(String param1) { + this.param1 = param1; + } + + public String getParam2() { + return param2; + } + + public void setParam2(String param2) { + this.param2 = param2; + } + + public NestedBeanParam getNestedParams() { + return nestedParams; + } + + public void setNestedParams(final NestedBeanParam nestedParams) { + this.nestedParams = nestedParams; + } + + private static class NestedBeanParam { + @FormParam(value = "param3") + private String param3; + public String getParam3() { + return param3; + } + + public void setParam3(String param3) { + this.param3 = param3; + } + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/NestedBeanParam.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/NestedBeanParam.java new file mode 100644 index 0000000000..dfaf5828f8 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/NestedBeanParam.java @@ -0,0 +1,32 @@ +package io.swagger.v3.jaxrs2.resources.model; + +import javax.ws.rs.BeanParam; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.QueryParam; + +public class NestedBeanParam { + + @BeanParam + private NestedClass nestedParams; + + public NestedClass getNestedParams() { + return nestedParams; + } + + public void setNestedParams(final NestedClass nestedParams) { + this.nestedParams = nestedParams; + } + + public class NestedClass { + @QueryParam(value = "queryParam") + @DefaultValue("10") + private Integer queryParam = 10; + public Integer getQueryParam() { + return queryParam; + } + + public void setQueryParam(final Integer queryParam) { + this.queryParam = queryParam; + } + } +}