diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 372bbcd5f5..f90f5d569f 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -1079,7 +1079,10 @@ public static Schema resolveSchemaFromType(Class schemaImplementation, existingSchemaObject = reResolvedSchema.get(); } } - if (StringUtils.isBlank(existingSchemaObject.get$ref()) && StringUtils.isBlank(existingSchemaObject.getType())) { + boolean doesSchemaHaveNullOrEmptyTypes = existingSchemaObject.getTypes() == null || existingSchemaObject.getTypes().isEmpty(); + if (StringUtils.isBlank(existingSchemaObject.get$ref()) + && StringUtils.isBlank(existingSchemaObject.getType()) + && doesSchemaHaveNullOrEmptyTypes) { // default to string existingSchemaObject.setType("string"); } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/APIResponsesResourceTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/APIResponsesResourceTest.java new file mode 100644 index 0000000000..90e48b8833 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/APIResponsesResourceTest.java @@ -0,0 +1,35 @@ +package io.swagger.v3.jaxrs2; + +import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; +import io.swagger.v3.jaxrs2.resources.APIResponsesResource; +import io.swagger.v3.oas.integration.SwaggerConfiguration; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.media.Schema; +import org.testng.annotations.Test; + +import java.util.Collections; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; + +public class APIResponsesResourceTest { + + @Test + public void testBooleanResponseSchema31() { + OpenAPI openAPI = new Reader(new SwaggerConfiguration().openAPI31(true)) + .read(APIResponsesResource.class); + + Schema responseSchema = openAPI.getPaths() + .get("/mypath") + .getPost() + .getResponses() + .get("200") + .getContent() + .get("*/*") + .getSchema(); + + assertNull(responseSchema.getType()); + assertEquals(responseSchema.getTypes(), Collections.singleton("boolean")); + SerializationMatchers.assertEqualsToJson31(responseSchema, "{\"type\":\"boolean\"}"); + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/APIResponsesResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/APIResponsesResource.java new file mode 100644 index 0000000000..9be097e5a0 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/APIResponsesResource.java @@ -0,0 +1,23 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; + +import javax.ws.rs.POST; +import javax.ws.rs.Path; + +@Path("mypath") +public class APIResponsesResource { + + @POST + @ApiResponses({ + @ApiResponse( + responseCode = "200", + content = @Content(schema = @Schema(implementation = Boolean.class)) + ) + }) + public void myMethod() { + } +}