diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java index 8c36b3dc06..c2fbef1374 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java @@ -475,12 +475,12 @@ else if ("formData".equals(value)) { if(sp != null) { // type is mandatory when sp != null - getString("type", obj, true, location, result); + String paramType = getString("type", obj, true, location, result); Map map = new LinkedHashMap(); map.put(TYPE, type); map.put(FORMAT, format); - String defaultValue = getString("default", obj, false, location, result); + String defaultValue = parameterDefault(obj, paramType, location, result); map.put(DEFAULT, defaultValue); sp.setDefault(defaultValue); @@ -657,6 +657,15 @@ else if(!BODY_PARAMETER_KEYS.contains(key)) { return output; } + private String parameterDefault(ObjectNode node, String type, String location, ParseResult result) { + String key = "default"; + if (type != null && type.equals("array")) { + ArrayNode array = getArray(key, node, false, location, result); + return array != null ? array.toString() : null; + } + return getString(key, node, false, location, result); + } + private Property schema(Map schemaItems, JsonNode obj, String location, ParseResult result) { return Json.mapper().convertValue(obj, Property.class); } diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java index a0e32628cb..a62740470d 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java @@ -5,9 +5,7 @@ import io.swagger.models.auth.BasicAuthDefinition; import io.swagger.models.auth.In; import io.swagger.models.auth.SecuritySchemeDefinition; -import io.swagger.models.parameters.BodyParameter; -import io.swagger.models.parameters.Parameter; -import io.swagger.models.parameters.QueryParameter; +import io.swagger.models.parameters.*; import io.swagger.models.properties.*; import io.swagger.parser.SwaggerParser; import io.swagger.parser.SwaggerResolver; @@ -1558,4 +1556,96 @@ public void testUntypedAdditionalProperties() { assertTrue(additionalProperties instanceof UntypedProperty); assertEquals(additionalProperties.getType(), null); } + + @Test + public void testArrayParameterDefaultValue() { + String swaggerSpec = "swagger: '2.0'\n" + + "basePath: /\n" + + "info:\n" + + " version: 0.0.0\n" + + " title: Simple API\n" + + "paths:\n" + + " /test:\n" + + " get:\n" + + " description: Test array query param\n" + + " produces:\n" + + " - application/json\n" + + " parameters:\n" + + " - name: arrayQueryParam\n" + + " in: query\n" + + " description: Test default value of array parameter\n" + + " default: [\"TestValue1\", \"TestValue2\"]\n" + + " required: false\n" + + " type: array\n" + + " collectionFormat: multi\n" + + " items:\n" + + " type: string\n" + + " enum:\n" + + " - TestValue1\n" + + " - TestValue2\n" + + " - name: arrayPathParam\n" + + " in: path\n" + + " description: Test default value of array parameter\n" + + " default: [100]\n" + + " required: false\n" + + " type: array\n" + + " collectionFormat: multi\n" + + " items:\n" + + " type: integer\n" + + " - name: arrayHeaderParam\n" + + " in: header\n" + + " description: Test default value of array parameter\n" + + " default: [100, 200]\n" + + " required: false\n" + + " type: array\n" + + " items:\n" + + " type: number\n" + + " - name: arrayFormParam\n" + + " in: formData\n" + + " description: Test default value of array parameter\n" + + " default: []\n" + + " required: false\n" + + " type: array\n" + + " items:\n" + + " type: boolean\n" + + " responses:\n" + + " '200':\n" + + " description: OK"; + + SwaggerParser parser = new SwaggerParser(); + + SwaggerDeserializationResult result = parser.readWithInfo(swaggerSpec); + List messageList = result.getMessages(); + Set messages = new HashSet(messageList); + assertEquals(0, messages.size()); + + Swagger swagger = result.getSwagger(); + List parameters = swagger.getPaths().get("/test").getGet().getParameters(); + assertEquals(4, parameters.size()); + + assertTrue(parameters.get(0) instanceof QueryParameter); + QueryParameter parameter1 = (QueryParameter) parameters.get(0); + assertEquals("arrayQueryParam", parameter1.getName()); + assertNotNull(parameter1.getDefault()); + assertNotNull(parameter1.getDefaultValue()); + + assertTrue(parameters.get(1) instanceof PathParameter); + PathParameter parameter2 = (PathParameter) parameters.get(1); + assertEquals("arrayPathParam", parameter2.getName()); + assertNotNull(parameter2.getDefault()); + assertNotNull(parameter2.getDefaultValue()); + + assertTrue(parameters.get(2) instanceof HeaderParameter); + HeaderParameter parameter3 = (HeaderParameter) parameters.get(2); + assertEquals("arrayHeaderParam", parameter3.getName()); + assertNotNull(parameter3.getDefault()); + assertNotNull(parameter3.getDefaultValue()); + + assertTrue(parameters.get(3) instanceof FormParameter); + FormParameter parameter4 = (FormParameter) parameters.get(3); + assertEquals("arrayFormParam", parameter4.getName()); + assertNotNull(parameter4.getDefault()); + assertNotNull(parameter4.getDefaultValue()); + } + } diff --git a/modules/swagger-parser/src/test/resources/petstore.json b/modules/swagger-parser/src/test/resources/petstore.json index d847efd256..b28925899b 100644 --- a/modules/swagger-parser/src/test/resources/petstore.json +++ b/modules/swagger-parser/src/test/resources/petstore.json @@ -186,7 +186,7 @@ "type": "string" }, "collectionFormat": "pipes", - "default": "available" + "default": ["available"] } ], "responses": {