From 3bb9cd9787975fa20b2a5fe5fca14ec59ad3511c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20M=C3=BCller?= Date: Tue, 30 Apr 2024 10:46:27 +0200 Subject: [PATCH] Set parameter schema base on schema or array of the @Parameter annotation --- .../io/swagger/v3/core/util/ParameterProcessor.java | 12 ++++++++++++ .../petstore/parameter/Parameters31Resource.java | 8 +++++++- .../petstore/parameter/ParametersResource.java | 8 +++++++- .../src/test/resources/petstore/FullPetResource.yaml | 8 ++++++++ .../petstore/parameters/Parameters31Resource.yaml | 8 ++++++++ .../petstore/parameters/ParametersResource.yaml | 8 ++++++++ 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java index 5c977bdfed..e9e8362d5f 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java @@ -164,6 +164,18 @@ public static Parameter applyAnnotations( if (content.isPresent()) { parameter.setContent(content.get()); parameter.setSchema(null); + } else { + Class schemaImplementation = p.schema().implementation(); + boolean isArray = false; + if (schemaImplementation == Void.class) { + schemaImplementation = p.array().schema().implementation(); + if (schemaImplementation != Void.class) { + isArray = true; + } + } + if (p.schema().implementation() != Void.class || isArray) { + AnnotationsUtils.getSchema(p.schema(), p.array(), isArray, schemaImplementation, components, jsonViewAnnotation).ifPresent(parameter::setSchema); + } } setParameterStyle(parameter, p); setParameterExplode(parameter, p); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java index d6e6d0f945..fe3fac39c3 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java @@ -118,11 +118,17 @@ public class Parameters31Resource { }) @Consumes({"application/json", "application/xml"}) public Parameters31Resource.SubscriptionResponse subscribe(@Parameter(description = "idParam") - @QueryParam("id") final String id) { + @QueryParam("id") final String id, + @Parameter(schema = @Schema(implementation = SubscriptionType.class)) + @QueryParam("enumStringParameter") final String enumStringParameter) { return null; } public static class SubscriptionResponse { public String subscriptionId; } + + enum SubscriptionType { + EMAIL, SMS, PHONE_CALL + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/ParametersResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/ParametersResource.java index 7562b26012..ea7e6f199a 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/ParametersResource.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/ParametersResource.java @@ -77,11 +77,17 @@ public class ParametersResource { }) @Consumes({"application/json", "application/xml"}) public ParametersResource.SubscriptionResponse subscribe(@Parameter(description = "idParam") - @QueryParam("id") final String id) { + @QueryParam("id") final String id, + @Parameter(schema = @Schema(implementation = SubscriptionType.class)) + @QueryParam("enumStringParameter") final String enumStringParameter) { return null; } static class SubscriptionResponse { public String subscriptionId; } + + enum SubscriptionType { + EMAIL, SMS, PHONE_CALL + } } diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml index 5312ec646c..e5593015ef 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml @@ -822,6 +822,14 @@ paths: description: idParam schema: type: string + - name: enumStringParameter + in: query + schema: + type: string + enum: + - EMAIL + - SMS + - PHONE_CALL responses: default: description: test description diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml index 3cb83e1350..9d54d2ca35 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml @@ -82,6 +82,14 @@ paths: description: idParam schema: type: string + - name: enumStringParameter + in: query + schema: + type: string + enum: + - EMAIL + - SMS + - PHONE_CALL responses: default: description: test description diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml index c1117da046..060630e148 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml @@ -76,6 +76,14 @@ paths: description: idParam schema: type: string + - name: enumStringParameter + in: query + schema: + type: string + enum: + - EMAIL + - SMS + - PHONE_CALL responses: default: description: test description