From 01c4272768c2b0a4644db0c143accc34fda15f73 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 6 Feb 2019 09:30:26 +0100 Subject: [PATCH] try resolving response example as json --- .../main/java/io/swagger/jaxrs/Reader.java | 10 ++++- .../src/test/java/io/swagger/ReaderTest.java | 40 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/Reader.java b/modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/Reader.java index ec079ffa0a..1c19b45157 100644 --- a/modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/Reader.java +++ b/modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/Reader.java @@ -69,6 +69,7 @@ import io.swagger.models.properties.Property; import io.swagger.models.properties.RefProperty; import io.swagger.util.BaseReaderUtils; +import io.swagger.util.Json; import io.swagger.util.ParameterProcessor; import io.swagger.util.PathUtils; import io.swagger.util.ReflectionUtils; @@ -1045,9 +1046,14 @@ private Map parseExamples(Example examples) { if(prop.mediaType().equals("") && prop.value().equals("")){ continue; } - + Object exampleValue = null; + try { + exampleValue = Json.mapper().readTree(prop.value()); + } catch (Exception e) { + exampleValue = prop.value(); + } map = map == null ? new LinkedHashMap() : map; - map.put(prop.mediaType(), prop.value()); + map.put(prop.mediaType(), exampleValue); } return map; } diff --git a/modules/swagger-jaxrs/src/test/java/io/swagger/ReaderTest.java b/modules/swagger-jaxrs/src/test/java/io/swagger/ReaderTest.java index da740cf8c6..a1391a7948 100644 --- a/modules/swagger-jaxrs/src/test/java/io/swagger/ReaderTest.java +++ b/modules/swagger-jaxrs/src/test/java/io/swagger/ReaderTest.java @@ -1,11 +1,19 @@ package io.swagger; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Example; +import io.swagger.annotations.ExampleProperty; import io.swagger.converter.ModelConverters; import io.swagger.jaxrs.Reader; import io.swagger.models.ExternalDocs; import io.swagger.models.Model; import io.swagger.models.Operation; +import io.swagger.models.Pet; import io.swagger.models.Swagger; import io.swagger.models.Tag; import io.swagger.models.parameters.BodyParameter; @@ -42,6 +50,7 @@ import io.swagger.resources.RsMultipleConsumesProducesResource; import io.swagger.resources.SimpleMethods; import io.swagger.util.Json; +import io.swagger.util.Yaml; import org.testng.annotations.Test; import javax.ws.rs.DELETE; @@ -50,7 +59,9 @@ import javax.ws.rs.OPTIONS; import javax.ws.rs.POST; import javax.ws.rs.PUT; +import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.math.BigDecimal; @@ -465,6 +476,35 @@ public void testSubResourceHasTheRightApiPath() { } + @Test(description = "Test Response Example") + public void testResponseExample() { + Swagger swagger = getSwagger(ResponseExampleResource.class); + assertNotNull(swagger); + assertNotNull(swagger.getPath("/v1/example")); + assertEquals(swagger.getPaths().size(), 1); + assertTrue(swagger.getPath("/v1/example").getGet().getResponses().get("200").getExamples().get("application/json") instanceof JsonNode); + + } + + @Api + @Path("/v1") + public class ResponseExampleResource { + @Path("example") + @ApiOperation(value = "aa") + @ApiResponses({ + @ApiResponse(code = 200, message = "test", response = Pet.class, + examples = @Example(value = + { + @ExampleProperty(mediaType = "application/json", value = "{\"id\" : 1, \"name\" : \"test\"}") + } + )) + }) + @GET + public Response getResource() { + return null; + } + } + @Test(description = "Resolve Model with XML Properties starting with is prefix per #2635") public void testModelResolverXMLPropertiesName() { final MyClass myClass = new MyClass();