From c4d982f77584b8370ba16a33c5443b4b3af68fa2 Mon Sep 17 00:00:00 2001
From: drl-max <43247338+drl-max@users.noreply.github.com>
Date: Fri, 29 Mar 2019 18:39:53 -0700
Subject: [PATCH] Aspnetcore nullable support (#2529)
* Added nullable support to aspnetcore server
* Regenerated aspnetcore Petstore sample
* Implemented changes based on #1819.
---
.../languages/AspNetCoreServerCodegen.java | 26 +++++++++++++++++++
.../resources/aspnetcore/2.0/model.mustache | 2 +-
.../resources/aspnetcore/2.1/model.mustache | 2 +-
.../aspnetcore/.openapi-generator/VERSION | 2 +-
.../Org.OpenAPITools/Controllers/PetApi.cs | 8 +++---
.../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +--
.../Org.OpenAPITools/Controllers/UserApi.cs | 2 +-
7 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java
index fe4bce79ae3..80bc9d01f3b 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java
@@ -19,6 +19,7 @@ package org.openapitools.codegen.languages;
import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenType;
@@ -82,6 +83,18 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
cliOptions.clear();
+ typeMapping.put("boolean", "bool");
+ typeMapping.put("integer", "int");
+ typeMapping.put("float", "float");
+ typeMapping.put("long", "long");
+ typeMapping.put("double", "double");
+ typeMapping.put("number", "decimal");
+ typeMapping.put("DateTime", "DateTime");
+ typeMapping.put("date", "DateTime");
+ typeMapping.put("UUID", "Guid");
+
+ setSupportNullable(Boolean.TRUE);
+
// CLI options
addOption(CodegenConstants.LICENSE_URL,
CodegenConstants.LICENSE_URL_DESC,
@@ -375,4 +388,17 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
public String toRegularExpression(String pattern) {
return escapeText(pattern);
}
+
+ @Override
+ public String getNullableType(Schema p, String type) {
+ boolean isNullableExpected = p.getNullable() == null || (p.getNullable() != null && p.getNullable());
+
+ if (isNullableExpected && languageSpecificPrimitives.contains(type + "?")) {
+ return type + "?";
+ } else if (languageSpecificPrimitives.contains(type)) {
+ return type;
+ } else {
+ return null;
+ }
+ }
}
diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.0/model.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.0/model.mustache
index 4ff19b963b8..18355dadb3d 100644
--- a/modules/openapi-generator/src/main/resources/aspnetcore/2.0/model.mustache
+++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.0/model.mustache
@@ -26,7 +26,7 @@ namespace {{packageName}}.Models
{{#required}}
[Required]
{{/required}}
- [DataMember(Name="{{baseName}}")]
+ [DataMember(Name="{{baseName}}", EmitDefaultValue={{#isNullable}}true{{/isNullable}}{{^isNullable}}{{emitDefaultValue}}{{/isNullable}})]
{{#isEnum}}
public {{{datatypeWithEnum}}}{{#isEnum}}{{^isContainer}}?{{/isContainer}}{{/isEnum}} {{name}} { get; set; }
{{/isEnum}}
diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/model.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/model.mustache
index 4ff19b963b8..18355dadb3d 100644
--- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/model.mustache
+++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/model.mustache
@@ -26,7 +26,7 @@ namespace {{packageName}}.Models
{{#required}}
[Required]
{{/required}}
- [DataMember(Name="{{baseName}}")]
+ [DataMember(Name="{{baseName}}", EmitDefaultValue={{#isNullable}}true{{/isNullable}}{{^isNullable}}{{emitDefaultValue}}{{/isNullable}})]
{{#isEnum}}
public {{{datatypeWithEnum}}}{{#isEnum}}{{^isContainer}}?{{/isContainer}}{{/isEnum}} {{name}} { get; set; }
{{/isEnum}}
diff --git a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION
index 94ae9ee1fa8..afa63656064 100644
--- a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION
+++ b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION
@@ -1 +1 @@
-4.0.0-SNAPSHOT
+4.0.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs
index 8a0d855e30f..bf921975337 100644
--- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs
+++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs
@@ -83,7 +83,7 @@ namespace Org.OpenAPITools.Controllers
// return StatusCode(400);
string exampleJson = null;
- exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}";
+ exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}";
exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n";
var example = exampleJson != null
@@ -114,7 +114,7 @@ namespace Org.OpenAPITools.Controllers
// return StatusCode(400);
string exampleJson = null;
- exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}";
+ exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}";
exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n";
var example = exampleJson != null
@@ -149,7 +149,7 @@ namespace Org.OpenAPITools.Controllers
// return StatusCode(404);
string exampleJson = null;
- exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}";
+ exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}";
exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n";
var example = exampleJson != null
@@ -223,7 +223,7 @@ namespace Org.OpenAPITools.Controllers
// return StatusCode(200, default(ApiResponse));
string exampleJson = null;
- exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}";
+ exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}";
var example = exampleJson != null
? JsonConvert.DeserializeObject(exampleJson)
diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs
index d6e4720d4c1..3a7724d05fa 100644
--- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs
+++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs
@@ -97,7 +97,7 @@ namespace Org.OpenAPITools.Controllers
// return StatusCode(404);
string exampleJson = null;
- exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}";
+ exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}";
exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n";
var example = exampleJson != null
@@ -127,7 +127,7 @@ namespace Org.OpenAPITools.Controllers
// return StatusCode(400);
string exampleJson = null;
- exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}";
+ exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}";
exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n";
var example = exampleJson != null
diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs
index 01f3ade7a5b..913be703891 100644
--- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs
+++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs
@@ -127,7 +127,7 @@ namespace Org.OpenAPITools.Controllers
// return StatusCode(404);
string exampleJson = null;
- exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}";
+ exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}";
exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n";
var example = exampleJson != null