From 17c021df5b44bf6ac4e8ff49053905287dd974bd Mon Sep 17 00:00:00 2001 From: Max K Date: Thu, 21 Jul 2022 05:44:46 +0200 Subject: [PATCH] Added support for inheritance in Swashbuckle in ASP.NET Core (#12856) * Added support for inheritance in Swashbuckle * Updated to new API --- .../src/main/resources/aspnetcore/3.0/Startup.mustache | 2 ++ .../src/main/resources/aspnetcore/3.0/model.mustache | 3 +++ .../petstore/aspnetcore-3.0/src/Org.OpenAPITools/Startup.cs | 2 ++ .../petstore/aspnetcore-3.1/src/Org.OpenAPITools/Startup.cs | 2 ++ .../petstore/aspnetcore-5.0/src/Org.OpenAPITools/Startup.cs | 2 ++ .../petstore/aspnetcore-6.0/src/Org.OpenAPITools/Startup.cs | 2 ++ 6 files changed, 13 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Startup.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Startup.mustache index d94e1e6bb19..b9f38b815bb 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Startup.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Startup.mustache @@ -86,6 +86,8 @@ namespace {{packageName}} services .AddSwaggerGen(c => { + c.EnableAnnotations(enableAnnotationsForInheritance: true, enableAnnotationsForPolymorphism: true); + c.SwaggerDoc("{{{version}}}{{^version}}v1{{/version}}", new OpenApiInfo { Title = "{{{appName}}}{{^appName}}{{packageName}}{{/appName}}", diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/model.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/model.mustache index 43d92560b73..e96ce19cf52 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/model.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/model.mustache @@ -11,6 +11,7 @@ using Newtonsoft.Json; {{#model}} {{#discriminator}} using JsonSubTypes; +using Swashbuckle.AspNetCore.Annotations; {{/discriminator}} {{/model}} {{/models}} @@ -26,8 +27,10 @@ namespace {{modelPackage}} [DataContract] {{#discriminator}} [JsonConverter(typeof(JsonSubtypes), "{{{discriminatorName}}}")] + [SwaggerDiscriminator("{{{discriminatorName}}}")] {{#mappedModels}} [JsonSubtypes.KnownSubType(typeof({{{modelName}}}), "{{^vendorExtensions.x-discriminator-value}}{{{mappingName}}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{.}}}{{/vendorExtensions.x-discriminator-value}}")] + [SwaggerSubType(typeof({{{modelName}}}), DiscriminatorValue = "{{^vendorExtensions.x-discriminator-value}}{{{mappingName}}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{.}}}{{/vendorExtensions.x-discriminator-value}}")] {{/mappedModels}} {{/discriminator}} public {{#modelClassModifier}}{{.}} {{/modelClassModifier}}class {{classname}} {{#parent}}: {{{.}}}{{^pocoModels}}, {{/pocoModels}}{{/parent}}{{^pocoModels}}{{^parent}}: {{/parent}}IEquatable<{{classname}}>{{/pocoModels}} diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Startup.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Startup.cs index 70a6b10f058..ce27cdffd9a 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Startup.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Startup.cs @@ -80,6 +80,8 @@ namespace Org.OpenAPITools services .AddSwaggerGen(c => { + c.EnableAnnotations(enableAnnotationsForInheritance: true, enableAnnotationsForPolymorphism: true); + c.SwaggerDoc("1.0.0", new OpenApiInfo { Title = "OpenAPI Petstore", diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Startup.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Startup.cs index d3f0be5bc67..0b156ec4342 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Startup.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Startup.cs @@ -80,6 +80,8 @@ namespace Org.OpenAPITools services .AddSwaggerGen(c => { + c.EnableAnnotations(enableAnnotationsForInheritance: true, enableAnnotationsForPolymorphism: true); + c.SwaggerDoc("1.0.0", new OpenApiInfo { Title = "OpenAPI Petstore", diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Startup.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Startup.cs index 20cb5b5a949..014f5ef7a17 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Startup.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Startup.cs @@ -80,6 +80,8 @@ namespace Org.OpenAPITools services .AddSwaggerGen(c => { + c.EnableAnnotations(enableAnnotationsForInheritance: true, enableAnnotationsForPolymorphism: true); + c.SwaggerDoc("1.0.0", new OpenApiInfo { Title = "OpenAPI Petstore", diff --git a/samples/server/petstore/aspnetcore-6.0/src/Org.OpenAPITools/Startup.cs b/samples/server/petstore/aspnetcore-6.0/src/Org.OpenAPITools/Startup.cs index 5699f015167..aee0229fa2e 100644 --- a/samples/server/petstore/aspnetcore-6.0/src/Org.OpenAPITools/Startup.cs +++ b/samples/server/petstore/aspnetcore-6.0/src/Org.OpenAPITools/Startup.cs @@ -80,6 +80,8 @@ namespace Org.OpenAPITools services .AddSwaggerGen(c => { + c.EnableAnnotations(enableAnnotationsForInheritance: true, enableAnnotationsForPolymorphism: true); + c.SwaggerDoc("1.0.0", new OpenApiInfo { Title = "OpenAPI Petstore",