Skip to content

Commit 94fd427

Browse files
authored
Merge pull request #821 from jmini/issue820
Convert x-nullable for formData parameter
2 parents 95f1fa3 + 3650b32 commit 94fd427

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -659,11 +659,17 @@ private RequestBody convertFormDataToRequestBody(List<io.swagger.models.paramete
659659
schema.setMinLength(sp.getMinLength());
660660
schema.setMaxLength(sp.getMaxLength());
661661

662-
Object exampleExtension = sp.getVendorExtensions().get("x-example");
663-
if (exampleExtension != null) {
664-
schema.setExample(exampleExtension);
662+
if (sp.getVendorExtensions() != null) {
663+
Object exampleExtension = sp.getVendorExtensions().get("x-example");
664+
if (exampleExtension != null) {
665+
schema.setExample(exampleExtension);
666+
}
667+
Object nullableExtension = sp.getVendorExtensions().get("x-nullable");
668+
if (nullableExtension != null) {
669+
schema.setNullable((Boolean) nullableExtension);
670+
}
671+
schema.setExtensions(convert(sp.getVendorExtensions()));
665672
}
666-
schema.setExtensions(convert(sp.getVendorExtensions()));
667673

668674
if (sp.getMultipleOf() != null) {
669675
schema.setMultipleOf(new BigDecimal(sp.getMultipleOf().toString()));

modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public class V2ConverterTest {
8787
private static final String ISSUE_762_JSON = "issue-762.json";
8888
private static final String ISSUE_765_YAML = "issue-765.yaml";
8989
private static final String ISSUE_768_JSON = "issue-786.json";
90+
private static final String ISSUE_820_YAML = "issue-820.yaml";
9091

9192
private static final String API_BATCH_PATH = "/api/batch/";
9293
private static final String PETS_PATH = "/pets";
@@ -725,6 +726,33 @@ public void testIssue755() throws Exception {
725726
final OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_755_YAML);
726727
assertNotNull(oas);
727728
}
729+
730+
@Test(description = "OpenAPI v2 converter - Conversion param extensions should be preserved")
731+
public void testIssue820() throws Exception {
732+
final OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_820_YAML);
733+
assertNotNull(oas);
734+
Operation post = oas.getPaths().get("/issue820").getPost();
735+
assertNotNull(post.getRequestBody().getContent().get("multipart/form-data"));
736+
assertNotNull(post.getRequestBody().getContent().get("multipart/form-data").getSchema());
737+
Map<String, Schema> properties = post.getRequestBody().getContent().get("multipart/form-data").getSchema().getProperties();
738+
assertNotNull(properties);
739+
assertEquals(properties.size(), 3, "size");
740+
Schema foo = properties.get("foo");
741+
assertNotNull(foo);
742+
assertNotNull(foo.getExtensions());
743+
assertEquals(foo.getExtensions().get("x-ext"), "some foo");
744+
assertEquals(foo.getNullable(), null);
745+
Schema bar = properties.get("bar");
746+
assertNotNull(bar);
747+
assertNotNull(bar.getExtensions());
748+
assertEquals(bar.getExtensions().get("x-ext"), "some bar");
749+
assertEquals(bar.getNullable(), Boolean.TRUE);
750+
Schema baz = properties.get("baz");
751+
assertNotNull(baz);
752+
assertNotNull(baz.getExtensions());
753+
assertEquals(baz.getExtensions().get("x-ext"), "some baz");
754+
assertEquals(baz.getNullable(), Boolean.FALSE);
755+
}
728756

729757
private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException {
730758
SwaggerConverter converter = new SwaggerConverter();
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
swagger: "2.0"
2+
info:
3+
version: "1.0.1"
4+
title: "Test for issue 820"
5+
basePath: "/v1"
6+
paths:
7+
/issue820:
8+
post:
9+
operationId: "issue820"
10+
parameters:
11+
- name: foo
12+
in: formData
13+
description: some foo param
14+
required: false
15+
type: string
16+
x-ext: some foo
17+
- name: bar
18+
in: formData
19+
description: some bar param
20+
required: true
21+
type: integer
22+
x-nullable: true
23+
x-ext: some bar
24+
- name: baz
25+
in: formData
26+
description: some baz param
27+
required: true
28+
type: integer
29+
x-nullable: false
30+
x-ext: some baz
31+
responses:
32+
200:
33+
description: "success"

0 commit comments

Comments
 (0)