forked from loafle/openapi-generator-original
[Java] Fix default values of array-type parameters in a referenced file (#17779)
* fix invalid default values of parameters with array type in a referenced file * add test
This commit is contained in:
parent
d0ed25a06d
commit
795f0798ac
@ -1289,6 +1289,9 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
|
|||||||
return localDate.toString();
|
return localDate.toString();
|
||||||
}
|
}
|
||||||
if (ModelUtils.isArraySchema(schema)) {
|
if (ModelUtils.isArraySchema(schema)) {
|
||||||
|
// swagger-parser parses the default value differently depending on whether it's in a referenced file or not.
|
||||||
|
// cf. https://github.com/swagger-api/swagger-parser/issues/1958
|
||||||
|
// ArrayList if in the referenced file, ArrayNode if not.
|
||||||
if (defaultValue instanceof ArrayNode) {
|
if (defaultValue instanceof ArrayNode) {
|
||||||
ArrayNode array = (ArrayNode) defaultValue;
|
ArrayNode array = (ArrayNode) defaultValue;
|
||||||
return StreamSupport.stream(array.spliterator(), false)
|
return StreamSupport.stream(array.spliterator(), false)
|
||||||
@ -1297,6 +1300,11 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
|
|||||||
.map(item -> StringUtils.removeStart(item, "\""))
|
.map(item -> StringUtils.removeStart(item, "\""))
|
||||||
.map(item -> StringUtils.removeEnd(item, "\""))
|
.map(item -> StringUtils.removeEnd(item, "\""))
|
||||||
.collect(Collectors.joining(","));
|
.collect(Collectors.joining(","));
|
||||||
|
} else if (defaultValue instanceof ArrayList) {
|
||||||
|
ArrayList<?> array = (ArrayList<?>) defaultValue;
|
||||||
|
return array.stream()
|
||||||
|
.map(Object::toString)
|
||||||
|
.collect(Collectors.joining(","));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// escape quotes
|
// escape quotes
|
||||||
|
@ -17,14 +17,18 @@
|
|||||||
|
|
||||||
package org.openapitools.codegen.java;
|
package org.openapitools.codegen.java;
|
||||||
|
|
||||||
|
import io.swagger.parser.OpenAPIParser;
|
||||||
import io.swagger.v3.oas.models.Components;
|
import io.swagger.v3.oas.models.Components;
|
||||||
import io.swagger.v3.oas.models.OpenAPI;
|
import io.swagger.v3.oas.models.OpenAPI;
|
||||||
import io.swagger.v3.oas.models.media.*;
|
import io.swagger.v3.oas.models.media.*;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.models.parameters.Parameter;
|
||||||
|
import io.swagger.v3.parser.core.models.ParseOptions;
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.openapitools.codegen.*;
|
import org.openapitools.codegen.*;
|
||||||
import org.openapitools.codegen.languages.AbstractJavaCodegen;
|
import org.openapitools.codegen.languages.AbstractJavaCodegen;
|
||||||
import org.openapitools.codegen.utils.ModelUtils;
|
import org.openapitools.codegen.utils.ModelUtils;
|
||||||
@ -873,6 +877,26 @@ public class AbstractJavaCodegenTest {
|
|||||||
Assert.assertTrue(cm.imports.contains("UUID"));
|
Assert.assertTrue(cm.imports.contains("UUID"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void arrayParameterDefaultValueDoesNotNeedBraces() throws Exception {
|
||||||
|
ParseOptions parseOptions = new ParseOptions();
|
||||||
|
parseOptions.setResolve(true);
|
||||||
|
final OpenAPI openAPI = new OpenAPIParser()
|
||||||
|
.readLocation("src/test/resources/3_0/issue_16223.yaml", null, parseOptions)
|
||||||
|
.getOpenAPI();
|
||||||
|
final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen();
|
||||||
|
codegen.setOpenAPI(openAPI);
|
||||||
|
|
||||||
|
Map<String, Schema> schemas = openAPI.getPaths().get("/test").getGet().getParameters().stream()
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
Parameter::getName,
|
||||||
|
p -> ModelUtils.getReferencedSchema(openAPI, p.getSchema())));
|
||||||
|
Assert.assertEquals(codegen.toDefaultParameterValue(schemas.get("fileEnumWithDefault")), "A,B");
|
||||||
|
Assert.assertEquals(codegen.toDefaultParameterValue(schemas.get("fileEnumWithDefaultEmpty")), "");
|
||||||
|
Assert.assertEquals(codegen.toDefaultParameterValue(schemas.get("inlineEnumWithDefault")), "A,B");
|
||||||
|
Assert.assertEquals(codegen.toDefaultParameterValue(schemas.get("inlineEnumWithDefaultEmpty")), "");
|
||||||
|
}
|
||||||
|
|
||||||
private static Schema<?> createObjectSchemaWithMinItems() {
|
private static Schema<?> createObjectSchemaWithMinItems() {
|
||||||
return new ObjectSchema()
|
return new ObjectSchema()
|
||||||
.addProperties("id", new IntegerSchema().format("int32"))
|
.addProperties("id", new IntegerSchema().format("int32"))
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
openapi: 3.0.3
|
||||||
|
info:
|
||||||
|
title: Test
|
||||||
|
version: 1.0.0-SNAPSHOT
|
||||||
|
paths:
|
||||||
|
/test:
|
||||||
|
get:
|
||||||
|
parameters:
|
||||||
|
- name: fileEnumWithDefault
|
||||||
|
in: query
|
||||||
|
schema:
|
||||||
|
$ref: './issue_16223_enum_with_default.yaml'
|
||||||
|
- name: fileEnumWithDefaultEmpty
|
||||||
|
in: query
|
||||||
|
schema:
|
||||||
|
$ref: './issue_16223_enum_with_default_empty.yaml'
|
||||||
|
- name: inlineEnumWithDefault
|
||||||
|
in: query
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- A
|
||||||
|
- B
|
||||||
|
- C
|
||||||
|
default:
|
||||||
|
- A
|
||||||
|
- B
|
||||||
|
- name: inlineEnumWithDefaultEmpty
|
||||||
|
in: query
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- A
|
||||||
|
- B
|
||||||
|
- C
|
||||||
|
default: []
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
|
||||||
|
components:
|
||||||
|
schemas:
|
||||||
|
Test:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
withDefault:
|
||||||
|
$ref: './issue_16223_enum_with_default.yaml'
|
||||||
|
withEmptyDefault:
|
||||||
|
$ref: './issue_16223_enum_with_default_empty.yaml'
|
@ -0,0 +1,10 @@
|
|||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- A
|
||||||
|
- B
|
||||||
|
- C
|
||||||
|
default:
|
||||||
|
- A
|
||||||
|
- B
|
@ -0,0 +1,8 @@
|
|||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- A
|
||||||
|
- B
|
||||||
|
- C
|
||||||
|
default: []
|
Loading…
x
Reference in New Issue
Block a user