Repository: swagger-api/swagger-parser
Pull request #2161 (2025-03-25 10:54:21)

allow non explicit style and explode with 'explicitStyleAndExplode' option


Patch:
diff --git a/.github/workflows/maven-pulls.yml b/.github/workflows/maven-pulls.yml
index 4328767c..c4e1edbb 100644
--- a/.github/workflows/maven-pulls.yml
+++ b/.github/workflows/maven-pulls.yml
@@ -20,7 +20,7 @@ jobs:
         java-version: ${{ matrix.java }}
         distribution: 'zulu'
     - name: Cache local Maven repository
-      uses: actions/cache@v2
+      uses: actions/cache@v4
       with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/maven-v1-pulls.yml b/.github/workflows/maven-v1-pulls.yml
index 62bb2bbf..1c077fd6 100644
--- a/.github/workflows/maven-v1-pulls.yml
+++ b/.github/workflows/maven-v1-pulls.yml
@@ -20,7 +20,7 @@ jobs:
           java-version: ${{ matrix.java }}
           distribution: 'zulu'
       - name: Cache local Maven repository
-        uses: actions/cache@v2
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/maven-v1.yml b/.github/workflows/maven-v1.yml
index d0be1f29..46464191 100644
--- a/.github/workflows/maven-v1.yml
+++ b/.github/workflows/maven-v1.yml
@@ -23,7 +23,7 @@ jobs:
           server-username: MAVEN_USERNAME
           server-password: MAVEN_PASSWORD
       - name: Cache local Maven repository
-        uses: actions/cache@v2
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 7f95213e..c259ff78 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -23,7 +23,7 @@ jobs:
         server-username: MAVEN_USERNAME
         server-password: MAVEN_PASSWORD
     - name: Cache local Maven repository
-      uses: actions/cache@v2
+      uses: actions/cache@v4
       with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/next-snapshot-v1.yml b/.github/workflows/next-snapshot-v1.yml
index 7aaf9277..fa8ee066 100644
--- a/.github/workflows/next-snapshot-v1.yml
+++ b/.github/workflows/next-snapshot-v1.yml
@@ -29,7 +29,7 @@ jobs:
           server-username: MAVEN_USERNAME
           server-password: MAVEN_PASSWORD
       - name: Cache local Maven repository
-        uses: actions/cache@v2
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/next-snapshot.yml b/.github/workflows/next-snapshot.yml
index adf990b5..4db72bcb 100644
--- a/.github/workflows/next-snapshot.yml
+++ b/.github/workflows/next-snapshot.yml
@@ -29,7 +29,7 @@ jobs:
           server-username: MAVEN_USERNAME
           server-password: MAVEN_PASSWORD
       - name: Cache local Maven repository
-        uses: actions/cache@v2
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/prepare-release-v1.yml b/.github/workflows/prepare-release-v1.yml
index 06283aca..398f728a 100644
--- a/.github/workflows/prepare-release-v1.yml
+++ b/.github/workflows/prepare-release-v1.yml
@@ -29,7 +29,7 @@ jobs:
         server-username: MAVEN_USERNAME
         server-password: MAVEN_PASSWORD
     - name: Cache local Maven repository
-      uses: actions/cache@v2
+      uses: actions/cache@v4
       with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml
index f0d8315e..f0959221 100644
--- a/.github/workflows/prepare-release.yml
+++ b/.github/workflows/prepare-release.yml
@@ -29,7 +29,7 @@ jobs:
         server-username: MAVEN_USERNAME
         server-password: MAVEN_PASSWORD
     - name: Cache local Maven repository
-      uses: actions/cache@v2
+      uses: actions/cache@v4
       with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/release-v1.yml b/.github/workflows/release-v1.yml
index 48a515fa..6731b061 100644
--- a/.github/workflows/release-v1.yml
+++ b/.github/workflows/release-v1.yml
@@ -29,7 +29,7 @@ jobs:
         server-username: MAVEN_USERNAME
         server-password: MAVEN_PASSWORD
     - name: Cache local Maven repository
-      uses: actions/cache@v2
+      uses: actions/cache@v4
       with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4fbc14b6..4208d0e3 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -29,7 +29,7 @@ jobs:
         server-username: MAVEN_USERNAME
         server-password: MAVEN_PASSWORD
     - name: Cache local Maven repository
-      uses: actions/cache@v2
+      uses: actions/cache@v4
       with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java b/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java
index 60a587af..777d4877 100644
--- a/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java
+++ b/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java
@@ -21,6 +21,7 @@ public class ParseOptions {
     private boolean safelyResolveURL;
     private List<String> remoteRefAllowList;
     private List<String> remoteRefBlockList;
+    private boolean explicitStyleAndExplode = true;
 
 
     public boolean isResolve() {
@@ -169,4 +170,13 @@ public class ParseOptions {
     public void setResolveResponses(boolean resolveResponses) {
         this.resolveResponses = resolveResponses;
     }
+
+    public boolean isExplicitStyleAndExplode() {
+        return explicitStyleAndExplode;
+    }
+
+    public void setExplicitStyleAndExplode(boolean explicitStyleAndExplode) {
+        this.explicitStyleAndExplode = explicitStyleAndExplode;
+    }
+
 }
diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
index bf10fcd7..5a3aa128 100644
--- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
+++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
@@ -305,6 +305,7 @@ public class OpenAPIDeserializer {
             rootParse.setInferSchemaType(options.isInferSchemaType());
             rootParse.setAllowEmptyStrings(options.isAllowEmptyString());
             rootParse.setValidateInternalRefs(options.isValidateInternalRefs());
+            rootParse.setExplicitStyleAndExplode(options.isExplicitStyleAndExplode());
             OpenAPI api = parseRoot(rootNode, rootParse, path);
             result.openapi31(rootParse.isOpenapi31());
             result.setOpenAPI(api);
@@ -1520,7 +1521,9 @@ public class OpenAPIDeserializer {
 		value = getString("style", node, false, location, result);
 
 		if (StringUtils.isBlank(value)) {
-			encoding.setStyle(Encoding.StyleEnum.FORM);
+            if (result.isExplicitStyleAndExplode()) {
+                encoding.setStyle(Encoding.StyleEnum.FORM);
+            }
 		} else {
 			if (value.equals(Encoding.StyleEnum.FORM.toString())) {
 				encoding.setStyle(Encoding.StyleEnum.FORM);
@@ -2131,9 +2134,9 @@ public class OpenAPIDeserializer {
             Boolean explode = getBoolean("explode", obj, false, location, result);
             if (explode != null) {
                 parameter.setExplode(explode);
-            } else if (StyleEnum.FORM.equals(parameter.getStyle())) {
+            } else if (StyleEnum.FORM.equals(parameter.getStyle()) && result.isExplicitStyleAndExplode()) {
                 parameter.setExplode(Boolean.TRUE);
-            } else {
+            } else if (result.isExplicitStyleAndExplode()){
                 parameter.setExplode(Boolean.FALSE);
             }
         }
@@ -2237,15 +2240,26 @@ public class OpenAPIDeserializer {
 			header.setDeprecated(deprecated);
 		}
 
+        String style = getString("style", headerNode, false, location, result);
+        if (StringUtils.isBlank(style)) {
+            if (result.isExplicitStyleAndExplode()) {
+                header.setStyle(Header.StyleEnum.SIMPLE);
+            }
+        } else {
+            if (value.equals(Header.StyleEnum.SIMPLE.toString())) {
+                header.setStyle(Header.StyleEnum.SIMPLE);
+            } else {
+                result.invalidType(location, "style", "simple", headerNode);
+            }
+        }
+
 		Boolean explode = getBoolean("explode", headerNode, false, location, result);
 		if (explode != null) {
 			header.setExplode(explode);
-		} else {
+		} else if (result.isExplicitStyleAndExplode()){
 			header.setExplode(Boolean.FALSE);
 		}
 
-		header.setStyle(Header.StyleEnum.SIMPLE);
-
 		ObjectNode headerObject = getObject("schema", headerNode, false, location, result);
 		if (headerObject != null) {
 			header.setSchema(getSchema(headerObject, location, result));
@@ -3369,11 +3383,13 @@ public class OpenAPIDeserializer {
 
 	public void setStyle(String value, Parameter parameter, String location, ObjectNode obj, ParseResult result) {
 		if (StringUtils.isBlank(value)) {
-			if (QUERY_PARAMETER.equals(parameter.getIn()) || COOKIE_PARAMETER.equals(parameter.getIn())) {
-				parameter.setStyle(StyleEnum.FORM);
-			} else if (PATH_PARAMETER.equals(parameter.getIn()) || HEADER_PARAMETER.equals(parameter.getIn())) {
-				parameter.setStyle(StyleEnum.SIMPLE);
-			}
+            if (result.isExplicitStyleAndExplode()) {
+                if (QUERY_PARAMETER.equals(parameter.getIn()) || COOKIE_PARAMETER.equals(parameter.getIn())) {
+                    parameter.setStyle(StyleEnum.FORM);
+                } else if (PATH_PARAMETER.equals(parameter.getIn()) || HEADER_PARAMETER.equals(parameter.getIn())) {
+                    parameter.setStyle(StyleEnum.SIMPLE);
+                }
+            }
 		} else {
 			if (value.equals(StyleEnum.FORM.toString())) {
 				parameter.setStyle(StyleEnum.FORM);
@@ -4275,6 +4291,8 @@ public class OpenAPIDeserializer {
 		private boolean openapi31 = false;
 		private boolean oaiAuthor = false;
 
+        private boolean explicitStyleAndExplode = true;
+
 		public boolean isInferSchemaType() {
 			return inferSchemaType;
 		}
@@ -4370,6 +4388,19 @@ public class OpenAPIDeserializer {
 			return this;
 		}
 
+        public boolean isExplicitStyleAndExplode() {
+            return explicitStyleAndExplode;
+        }
+
+        public void setExplicitStyleAndExplode(boolean explicitStyleAndExplode) {
+            this.explicitStyleAndExplode = explicitStyleAndExplode;
+        }
+
+        public ParseResult explicitStyleAndExplode(boolean explicitStyleAndExplode) {
+            this.explicitStyleAndExplode = explicitStyleAndExplode;
+            return this;
+        }
+
 		public List<String> getMessages() {
 			List<String> messages = new ArrayList<String>();
 			for (Location l : extra.keySet()) {
diff --git a/pom.xml b/pom.xml
index 18241699..d7d16f0c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -412,20 +412,20 @@
     </repositories>
     <properties>
         <maven.compiler.release>8</maven.compiler.release>
-        <snakeyaml-version>2.3</snakeyaml-version>
+        <snakeyaml-version>2.4</snakeyaml-version>
         <swagger-parser-v2-version>1.0.73</swagger-parser-v2-version>
         <commons-io-version>2.18.0</commons-io-version>
         <slf4j-version>2.0.9</slf4j-version>
-        <swagger-core-version>2.2.28</swagger-core-version>
+        <swagger-core-version>2.2.29</swagger-core-version>
         <swagger-core-v2-version>1.6.15</swagger-core-v2-version>
         <junit-version>4.13.2</junit-version>
-        <testng-version>7.10.2</testng-version>
+        <testng-version>7.11.0</testng-version>
         <jmockit-version>1.49</jmockit-version>
         <wiremock-version>2.35.2</wiremock-version>
         <surefire-version>3.2.2</surefire-version>
         <commons-lang-version>3.17.0</commons-lang-version>
-        <jackson-version>2.18.2</jackson-version>
-        <jackson-databind-version>2.18.2</jackson-databind-version>
+        <jackson-version>2.18.3</jackson-version>
+        <jackson-databind-version>2.18.3</jackson-databind-version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <sonatypeOssDistMgmtSnapshotsUrl>https://oss.sonatype.org/content/repositories/snapshots/</sonatypeOssDistMgmtSnapshotsUrl>
     </properties>


Test patch:
diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
index f67ba3ac..1308c6c0 100644
--- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
+++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
@@ -3362,6 +3362,63 @@ public class OpenAPIV3ParserTest {
         SwaggerParseResult parseResult = openApiParser.readLocation("resolve-responses-test.yaml", null, options);
         OpenAPI openAPI = parseResult.getOpenAPI();
         assertNull(openAPI.getPaths().get("/users").getGet().getResponses().get("400").get$ref());
+    }
 
+    @Test(description = "style and explode should not be set with explicitStyleAndExplode = false")
+    public void testStyleAndExplodeNotExplicit(){
+        ParseOptions options = new ParseOptions();
+        options.setExplicitStyleAndExplode(false);
+        OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
+        SwaggerParseResult parseResult = openApiParser.readLocation("style-explode.yaml", null, options);
+        OpenAPI openAPI = parseResult.getOpenAPI();
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(0).getStyle().toString(), "form");
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(0).getExplode(), true);
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(1).getStyle().toString(), "spaceDelimited");
+        assertNull(openAPI.getPaths().get("/test").getGet().getParameters().get(1).getExplode());
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(2).getExplode(), true);
+        assertNull(openAPI.getPaths().get("/test").getGet().getParameters().get(2).getStyle());
+        assertNull(openAPI.getPaths().get("/test").getGet().getParameters().get(6).getStyle());
+        assertNull(openAPI.getPaths().get("/test").getGet().getParameters().get(6).getExplode());
+        assertNull(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("bar").getExplode());
+        assertNull(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("bar").getStyle());
+        assertEquals(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("foo").getExplode(), false);
+        assertNull(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("foo").getStyle());
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("file").getStyle().toString(), "form");
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("file").getExplode(), true);
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyStyle").getStyle().toString(), "form");
+        assertNull(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyStyle").getExplode());
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyExplode").getExplode(), true);
+        assertNull(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyExplode").getStyle());
+        assertNull(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithout").getStyle());
+        assertNull(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithout").getExplode());
+    }
+
+    @Test(description = "style and explode should be set with explicitStyleAndExplode = true")
+    public void testStyleAndExplodeExplicit(){
+        ParseOptions options = new ParseOptions();
+        options.setExplicitStyleAndExplode(true);
+        OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
+        SwaggerParseResult parseResult = openApiParser.readLocation("style-explode.yaml", null, options);
+        OpenAPI openAPI = parseResult.getOpenAPI();
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(0).getStyle().toString(), "form");
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(0).getExplode(), true);
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(1).getStyle().toString(), "spaceDelimited");
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(1).getExplode(), false);
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(2).getStyle().toString(), "form");
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(2).getExplode(), true);
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(6).getStyle().toString(), "simple");
+        assertEquals(openAPI.getPaths().get("/test").getGet().getParameters().get(6).getExplode(), false);
+        assertEquals(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("bar").getExplode(), false);
+        assertEquals(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("bar").getStyle().toString(), "simple");
+        assertEquals(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("foo").getExplode(), false);
+        assertNull(openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders().get("foo").getStyle());
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("file").getStyle().toString(), "form");
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("file").getExplode(), true);
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyStyle").getStyle().toString(), "form");
+        assertNull(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyStyle").getExplode());
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyExplode").getExplode(), true);
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithOnlyExplode").getStyle().toString(), "form");
+        assertEquals(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithout").getStyle().toString(), "form");
+        assertNull(openAPI.getPaths().get("/test").getPost().getRequestBody().getContent().get("multipart/form-data").getEncoding().get("fileWithout").getExplode());
     }
 }
\ No newline at end of file
diff --git a/modules/swagger-parser-v3/src/test/resources/style-explode.yaml b/modules/swagger-parser-v3/src/test/resources/style-explode.yaml
new file mode 100644
index 00000000..b5ce6b59
--- /dev/null
+++ b/modules/swagger-parser-v3/src/test/resources/style-explode.yaml
@@ -0,0 +1,127 @@
+openapi: 3.0.3
+info:
+  title: Example API with Style and Explode
+  version: "1.0.0"
+paths:
+  /test:
+    get:
+      summary: Demonstrate query and header parameters with style/explode variations
+      parameters:
+        # Query parameter with both style and explode
+        - in: query
+          name: foo
+          style: form
+          explode: true
+          schema:
+            type: array
+            items:
+              type: string
+
+        # Query parameter with only style
+        - in: query
+          name: bar
+          style: spaceDelimited
+          schema:
+            type: array
+            items:
+              type: string
+
+        # Query parameter with only explode
+        - in: query
+          name: baz
+          explode: true
+          schema:
+            type: array
+            items:
+              type: string
+
+        # Header parameter with both style and explode
+        - in: header
+          name: X-Foo
+          style: simple
+          explode: true
+          schema:
+            type: array
+            items:
+              type: string
+
+        # Header parameter with only style
+        - in: header
+          name: X-Bar
+          style: simple
+          schema:
+            type: array
+            items:
+              type: string
+
+        # Header parameter with only explode
+        - in: header
+          name: X-Baz
+          explode: true
+          schema:
+            type: array
+            items:
+              type: string
+
+        # Header parameter without
+        - in: header
+          name: X-FooBar
+          schema:
+            type: array
+            items:
+              type: string
+      responses:
+        '200':
+          description: Success
+          headers:
+            foo: 
+              description: test
+              style: form
+              explode: false
+              schema: 
+                type: array
+                items:
+                  type: string                
+            bar:
+              description: test
+              schema:
+                type: array
+                items: 
+                  type: string
+
+    post:
+      summary: Demonstrate encoding with style/explode variations
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              type: object
+              properties:
+                file:
+                  type: string
+                  format: binary
+                fileWithOnlyStyle:
+                  type: string
+                  format: binary
+                fileWithOnlyExplode:
+                  type: string
+                  format: binary
+                fileWithout:
+                  type: string
+                  format: binary
+            encoding:
+              # Encoding with both style and explode
+              file:
+                style: form
+                explode: true
+              # Encoding with only style
+              fileWithOnlyStyle:
+                style: form
+              # Encoding with only explode
+              fileWithOnlyExplode:
+                explode: true
+              fileWithout:
+                contentType: image/png, image/jpeg
+      responses:
+        '200':
+          description: Success