diff --git a/lib/src/main/java/com/github/slamdev/openapispringgenerator/lib/generator/SpringCodegen.java b/lib/src/main/java/com/github/slamdev/openapispringgenerator/lib/generator/SpringCodegen.java index c38f1a5..6994092 100644 --- a/lib/src/main/java/com/github/slamdev/openapispringgenerator/lib/generator/SpringCodegen.java +++ b/lib/src/main/java/com/github/slamdev/openapispringgenerator/lib/generator/SpringCodegen.java @@ -148,6 +148,15 @@ protected void postProcessAllCodegenModels(Map allModels) }); } + @Override + public void postProcessModelProperty(CodegenModel model, CodegenProperty property) { + super.postProcessModelProperty(model, property); + Boolean skipSingular = (Boolean) property.vendorExtensions.get("x-skipSingular"); + if (Boolean.TRUE.equals(skipSingular)) { + property.vendorExtensions.put("skipSingular", true); + } + } + @Override public void preprocessOpenAPI(OpenAPI openAPI) { super.preprocessOpenAPI(openAPI); diff --git a/lib/src/main/resources/handlebars/springcodegen/pojo.mustache b/lib/src/main/resources/handlebars/springcodegen/pojo.mustache index bb2eadb..ec2d072 100644 --- a/lib/src/main/resources/handlebars/springcodegen/pojo.mustache +++ b/lib/src/main/resources/handlebars/springcodegen/pojo.mustache @@ -30,7 +30,11 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} implements @JsonProperty("{{baseName}}"){{#withXml}} @JacksonXmlProperty({{#isXmlAttribute}}isAttribute = true, {{/isXmlAttribute}}{{#xmlNamespace}}namespace="{{xmlNamespace}}", {{/xmlNamespace}}localName = "{{#xmlName}}{{xmlName}}{{/xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}"){{/withXml}} {{/vendorExtensions.x-is-discriminator-property}} - {{#isListContainer}}@Singular{{/isListContainer}} + {{#isListContainer}} + {{^vendorExtensions.skipSingular}} + @Singular + {{/vendorExtensions.skipSingular}} + {{/isListContainer}} {{^isContainer}}@Builder.Default{{/isContainer}} private {{{datatypeWithEnum}}} {{name}}{{^isContainer}} = {{{defaultValue}}}{{/isContainer}}; diff --git a/lib/src/test/java/com/github/slamdev/openapispringgenerator/lib/generator/GeneratorTest.java b/lib/src/test/java/com/github/slamdev/openapispringgenerator/lib/generator/GeneratorTest.java index 0d8e65a..7b56211 100644 --- a/lib/src/test/java/com/github/slamdev/openapispringgenerator/lib/generator/GeneratorTest.java +++ b/lib/src/test/java/com/github/slamdev/openapispringgenerator/lib/generator/GeneratorTest.java @@ -18,6 +18,11 @@ public void should_generate() { generate(file("event-spec-v3.yaml"), "consumer", Paths.get("build/test-output"), true); } + @Test + public void should_generate_list_with_singular_name() { + generate(file("event-spec-v2.yaml"), "server", Paths.get("build/test-output"), true); + } + private Path file(String name) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); return new File(classLoader.getResource(name).getFile()).toPath(); diff --git a/lib/src/test/resources/event-spec-v2.yaml b/lib/src/test/resources/event-spec-v2.yaml index ef09240..c152d78 100644 --- a/lib/src/test/resources/event-spec-v2.yaml +++ b/lib/src/test/resources/event-spec-v2.yaml @@ -12,6 +12,22 @@ paths: description: OK schema: "$ref": "#/definitions/UserEvent" + /users/list: + post: + responses: + '200': + description: OK + schema: + "$ref": "#/definitions/UserRequest" definitions: UserEvent: type: object + UserRequest: + type: object + properties: + output: + type: array + items: + type: string + x-skipSingular: true +