diff --git a/templates/base/http-clients/axios-http-client.eta b/templates/base/http-clients/axios-http-client.eta index 0f6923a3d..c842d306e 100644 --- a/templates/base/http-clients/axios-http-client.eta +++ b/templates/base/http-clients/axios-http-client.eta @@ -69,6 +69,20 @@ export class HttpClient { } protected createFormData(input: Record): FormData { + return Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + const propertyContent: Iterable = (property instanceof Array) ? property : [property] + + for (const formItem of propertyContent) { + const isFileType = formItem instanceof Blob || formItem instanceof File; + formData.append( + key, + isFileType ? formItem : this.stringifyFormItem(formItem) + ); + } + + return formData; + }, new FormData()); return Object.keys(input || {}).reduce((formData, key) => { const property = input[key]; formData.append( @@ -98,7 +112,7 @@ export class HttpClient { <% } %> const secureParams = ((typeof secure === 'boolean' ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData))) || {}; const requestParams = this.mergeRequestParams(params, secureParams); - const responseFormat = (format && this.format) || void 0; + const responseFormat = (format || this.format) || undefined; if (type === ContentType.FormData && body && body !== null && typeof body === "object") { body = this.createFormData(body as Record); diff --git a/tests/spec/axios/schema.ts b/tests/spec/axios/schema.ts index 8c0bda14e..64a6eeaa8 100644 --- a/tests/spec/axios/schema.ts +++ b/tests/spec/axios/schema.ts @@ -1513,6 +1513,17 @@ export class HttpClient { } protected createFormData(input: Record): FormData { + return Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + const propertyContent: Iterable = property instanceof Array ? property : [property]; + + for (const formItem of propertyContent) { + const isFileType = formItem instanceof Blob || formItem instanceof File; + formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem)); + } + + return formData; + }, new FormData()); return Object.keys(input || {}).reduce((formData, key) => { const property = input[key]; formData.append( @@ -1542,7 +1553,7 @@ export class HttpClient { (await this.securityWorker(this.securityData))) || {}; const requestParams = this.mergeRequestParams(params, secureParams); - const responseFormat = (format && this.format) || void 0; + const responseFormat = format || this.format || undefined; if (type === ContentType.FormData && body && body !== null && typeof body === "object") { body = this.createFormData(body as Record); diff --git a/tests/spec/axiosSingleHttpClient/schema.ts b/tests/spec/axiosSingleHttpClient/schema.ts index 9baf8d02e..8f03ee186 100644 --- a/tests/spec/axiosSingleHttpClient/schema.ts +++ b/tests/spec/axiosSingleHttpClient/schema.ts @@ -1513,6 +1513,23 @@ export class HttpClient { } protected createFormData(input: Record): FormData { + return Object.keys(input || {}).reduce((formData, key) => { + let property = input[key]; + let propertyContent: Iterable = property instanceof Array ? property : [property]; + + for (const formItem of propertyContent) { + formData.append( + key, + formItem instanceof Blob || formItem instanceof File + ? formItem + : typeof formItem === "object" && formItem !== null + ? JSON.stringify(formItem) + : `${formItem}`, + ); + } + + return formData; + }, new FormData()); return Object.keys(input || {}).reduce((formData, key) => { const property = input[key]; formData.append( @@ -1542,7 +1559,7 @@ export class HttpClient { (await this.securityWorker(this.securityData))) || {}; const requestParams = this.mergeRequestParams(params, secureParams); - const responseFormat = (format && this.format) || void 0; + const responseFormat = format || this.format || void 0; if (type === ContentType.FormData && body && body !== null && typeof body === "object") { body = this.createFormData(body as Record); diff --git a/tests/spec/jsAxios/schema.js b/tests/spec/jsAxios/schema.js index 66a3b86d3..164669eb7 100644 --- a/tests/spec/jsAxios/schema.js +++ b/tests/spec/jsAxios/schema.js @@ -44,7 +44,23 @@ export class HttpClient { }, }; } + stringifyFormItem(formItem) { + if (typeof formItem === "object" && formItem !== null) { + return JSON.stringify(formItem); + } else { + return `${formItem}`; + } + } createFormData(input) { + return Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + const propertyContent = property instanceof Array ? property : [property]; + for (const formItem of propertyContent) { + const isFileType = formItem instanceof Blob || formItem instanceof File; + formData.append(key, isFileType ? formItem : stringifyFormItem(formItem)); + } + return formData; + }, new FormData()); return Object.keys(input || {}).reduce((formData, key) => { const property = input[key]; formData.append(