From b88a8912158d97761170c9df56b3ef279abe6343 Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 11 May 2018 18:16:34 +0200 Subject: [PATCH] refs #2794 - support @NotNull in parameter --- .../v3/core/util/ParameterProcessor.java | 2 + .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 61 +++++++++++++++++++ .../jaxrs2/resources/Ticket2794Resource.java | 45 ++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket2794Resource.java 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 164f379c91..a3aa0d3021 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 @@ -154,6 +154,8 @@ public static Parameter applyAnnotations( } catch (Exception e) { LOGGER.error("failed on " + annotation.annotationType().getName(), e); } + } else if (annotation.annotationType().getName().equals("javax.validation.constraints.NotNull")) { + parameter.setRequired(true); } else if (annotation.annotationType().getName().equals("javax.ws.rs.FormParam")) { try { String name = (String) annotation.annotationType().getMethod("value").invoke(annotation); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index a80d0d118f..fc478cdad4 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -32,6 +32,7 @@ import io.swagger.v3.jaxrs2.resources.TestResource; import io.swagger.v3.jaxrs2.resources.Ticket2644ConcreteImplementation; import io.swagger.v3.jaxrs2.resources.Ticket2763Resource; +import io.swagger.v3.jaxrs2.resources.Ticket2794Resource; import io.swagger.v3.jaxrs2.resources.UserAnnotationResource; import io.swagger.v3.jaxrs2.resources.extensions.ExtensionsResource; import io.swagger.v3.jaxrs2.resources.extensions.OperationExtensionsResource; @@ -946,6 +947,66 @@ public void testTicket2763() { " $ref: https://openebench.bsc.es/monitor/tool/tool.json"; SerializationMatchers.assertEqualsToYaml(openAPI, yaml); } + + @Test(description = "NotNull parameters") + public void testTicket2794() { + Reader reader = new Reader(new OpenAPI()); + + OpenAPI openAPI = reader.read(Ticket2794Resource.class); + String yaml = "openapi: 3.0.1\n" + + "paths:\n" + + " /notnullparameter:\n" + + " get:\n" + + " operationId: getBooks\n" + + " parameters:\n" + + " - name: page\n" + + " in: query\n" + + " required: true\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " application/json: {}\n" + + " /notnullparameter/newnotnull:\n" + + " post:\n" + + " operationId: insertnotnull\n" + + " requestBody:\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/Book'\n" + + " required: true\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + " /notnullparameter/new_reqBody_required:\n" + + " post:\n" + + " operationId: insert\n" + + " requestBody:\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/Book'\n" + + " required: true\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + "components:\n" + + " schemas:\n" + + " Book:\n" + + " type: object\n" + + " properties:\n" + + " foo:\n" + + " type: string\n"; + SerializationMatchers.assertEqualsToYaml(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket2794Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket2794Resource.java new file mode 100644 index 0000000000..c7dda52a91 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket2794Resource.java @@ -0,0 +1,45 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.parameters.RequestBody; + +import javax.validation.constraints.NotNull; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.Arrays; + +@Path("/notnullparameter") +public class Ticket2794Resource +{ + @Produces({ MediaType.APPLICATION_JSON }) + @GET + public Response getBooks( + @QueryParam("page") @NotNull int page) { + return Response.ok( + Arrays.asList( + new Book(), + new Book() + ) + ).build(); + } + + @Path("/new_reqBody_required") + @POST + public Response insert(@RequestBody(required = true) Book book) { + return Response.ok().build(); + } + + @Path("/newnotnull") + @POST + public Response insertnotnull(@NotNull Book book) { + return Response.ok().build(); + } + + public static class Book { + public String foo; + } +} \ No newline at end of file