From 44c6d390a44602261fca069bf75f13bf3ee03821 Mon Sep 17 00:00:00 2001 From: Miles Ressler Date: Wed, 5 Feb 2020 12:05:27 -0600 Subject: [PATCH] [csharp] - fix json encoding override on form params --- .../openapitools/codegen/CodegenParameter.java | 8 +++++--- .../org/openapitools/codegen/DefaultCodegen.java | 16 ++++++++++++++++ .../src/main/resources/csharp/api.mustache | 4 ++-- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java index 270f4f2b5e6c..5c0ef33074ae 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java @@ -22,7 +22,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { public boolean isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, - secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode; + secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, jsonEncoding; public String baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style; @@ -96,6 +96,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { public CodegenParameter copy() { CodegenParameter output = new CodegenParameter(); output.isFile = this.isFile; + output.jsonEncoding = this.jsonEncoding; output.hasMore = this.hasMore; output.isContainer = this.isContainer; output.secondaryParam = this.secondaryParam; @@ -183,7 +184,7 @@ public CodegenParameter copy() { @Override public int hashCode() { - return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isListContainer, isMapContainer, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), multipleOf); + return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, jsonEncoding, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isListContainer, isMapContainer, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), multipleOf); } @Override @@ -227,6 +228,7 @@ public boolean equals(Object o) { hasValidation == that.hasValidation && isNullable == that.isNullable && required == that.required && + jsonEncoding == that.jsonEncoding && getExclusiveMaximum() == that.getExclusiveMaximum() && getExclusiveMinimum() == that.getExclusiveMinimum() && getUniqueItems() == that.getUniqueItems() && @@ -310,6 +312,7 @@ public String toString() { sb.append(", isListContainer=").append(isListContainer); sb.append(", isMapContainer=").append(isMapContainer); sb.append(", isFile=").append(isFile); + sb.append(", jsonEncoding=").append(jsonEncoding); sb.append(", isEnum=").append(isEnum); sb.append(", _enum=").append(_enum); sb.append(", allowableValues=").append(allowableValues); @@ -465,6 +468,5 @@ public Number getMultipleOf() { public void setMultipleOf(Number multipleOf) { this.multipleOf = multipleOf; } - } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 40954fb1fe54..c777a684c133 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -4917,6 +4917,15 @@ public List fromRequestBodyToFormParameters(RequestBody body, LOGGER.debug("debugging fromRequestBodyToFormParameters= " + body); Schema schema = ModelUtils.getSchemaFromRequestBody(body); schema = ModelUtils.getReferencedSchema(this.openAPI, schema); + Content c = body.getContent(); + String contentType = getContentType(body); + Map parameterEncoding = null; + if (c != null && contentType != null) { + MediaType mediaType = c.get(contentType); + if (mediaType != null) { + parameterEncoding = mediaType.getEncoding(); + } + } if (schema.getProperties() != null && !schema.getProperties().isEmpty()) { Map properties = schema.getProperties(); for (Map.Entry entry : properties.entrySet()) { @@ -4974,6 +4983,13 @@ public List fromRequestBodyToFormParameters(RequestBody body, codegenParameter.required = schema.getRequired().contains(entry.getKey()); } + if (parameterEncoding != null && parameterEncoding.containsKey(entry.getKey())) { + String overrideContentType = parameterEncoding.getOrDefault(entry.getKey(), new Encoding()).getContentType(); + if (overrideContentType != null) { + codegenParameter.jsonEncoding = overrideContentType.toLowerCase(Locale.ENGLISH).trim().equals("application/json"); + } + } + parameters.add(codegenParameter); } } diff --git a/modules/openapi-generator/src/main/resources/csharp/api.mustache b/modules/openapi-generator/src/main/resources/csharp/api.mustache index 9e68b292591e..f415e2db8e5d 100644 --- a/modules/openapi-generator/src/main/resources/csharp/api.mustache +++ b/modules/openapi-generator/src/main/resources/csharp/api.mustache @@ -248,7 +248,7 @@ namespace {{packageName}}.{{apiPackage}} if ({{paramName}} != null) localVarHeaderParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToString({{paramName}})); // header parameter {{/headerParams}} {{#formParams}} - if ({{paramName}} != null) {{#isFile}}localVarFileParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}localVarFormParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}} + if ({{paramName}} != null) {{#isFile}}localVarFileParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}localVarFormParams.Add("{{baseName}}", {{#jsonEncoding}}{{paramName}}.ToJson(){{/jsonEncoding}}{{^jsonEncoding}}this.Configuration.ApiClient.ParameterToString({{paramName}}){{/jsonEncoding}}); // form parameter{{/isFile}} {{/formParams}} {{#bodyParam}} if ({{paramName}} != null && {{paramName}}.GetType() != typeof(byte[])) @@ -384,7 +384,7 @@ namespace {{packageName}}.{{apiPackage}} if ({{paramName}} != null) localVarHeaderParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToString({{paramName}})); // header parameter {{/headerParams}} {{#formParams}} - if ({{paramName}} != null) {{#isFile}}localVarFileParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}localVarFormParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}} + if ({{paramName}} != null) {{#isFile}}localVarFileParams.Add("{{baseName}}", this.Configuration.ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}localVarFormParams.Add("{{baseName}}", {{#jsonEncoding}}{{paramName}}.ToJson(){{/jsonEncoding}}{{^jsonEncoding}}this.Configuration.ApiClient.ParameterToString({{paramName}}){{/jsonEncoding}}); // form parameter{{/isFile}} {{/formParams}} {{#bodyParam}} if ({{paramName}} != null && {{paramName}}.GetType() != typeof(byte[]))