Skip to content

Commit ce63066

Browse files
authored
Merge pull request #671 from swagger-api/issue-553
Fixed wrong form parameters
2 parents b30acc3 + 5ae789f commit ce63066

File tree

3 files changed

+56
-39
lines changed

3 files changed

+56
-39
lines changed

src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2144,31 +2144,6 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
21442144
param = getParameterFromRef(param.get$ref(), openAPI);
21452145
}
21462146
CodegenParameter codegenParameter = fromParameter(param, imports);
2147-
// rename parameters to make sure all of them have unique names
2148-
if (ensureUniqueParams) {
2149-
while (true) {
2150-
boolean exists = false;
2151-
for (CodegenParameter cp : allParams) {
2152-
if (codegenParameter.paramName != null && codegenParameter.paramName.equals(cp.paramName)) {
2153-
exists = true;
2154-
break;
2155-
}
2156-
}
2157-
if (exists) {
2158-
codegenParameter.paramName = generateNextName(codegenParameter.paramName);
2159-
} else {
2160-
break;
2161-
}
2162-
}
2163-
}
2164-
2165-
// set isPrimitiveType and baseType for allParams
2166-
/*if (languageSpecificPrimitives.contains(p.baseType)) {
2167-
p.isPrimitiveType = true;
2168-
p.baseType = getSwaggerType(p);
2169-
}*/
2170-
2171-
21722147
allParams.add(codegenParameter);
21732148
// Issue #2561 (neilotoole) : Moved setting of is<Type>Param flags
21742149
// from here to fromParameter().
@@ -4229,6 +4204,10 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation
42294204
}
42304205
this.addCodegenContentParemeters(codegenOperation, codegenContents);
42314206
for (CodegenContent content : codegenContents) {
4207+
if (ensureUniqueParams) {
4208+
ensureUniqueParameters(content.getParameters());
4209+
}
4210+
42324211
Collections.sort(content.getParameters(), (CodegenParameter one, CodegenParameter another) -> {
42334212
if (one.required == another.required){
42344213
return 0;
@@ -4263,6 +4242,20 @@ protected void addCodegenContentParemeters(CodegenOperation codegenOperation, Li
42634242
}
42644243
}
42654244

4245+
protected void ensureUniqueParameters(List<CodegenParameter> codegenParameters) {
4246+
if (codegenParameters == null || codegenParameters.isEmpty()) {
4247+
return;
4248+
}
4249+
for (CodegenParameter codegenParameter : codegenParameters) {
4250+
long count = codegenParameters.stream()
4251+
.filter(codegenParam -> codegenParam.paramName.equals(codegenParameter.paramName))
4252+
.count();
4253+
if (count > 1l) {
4254+
codegenParameter.paramName = generateNextName(codegenParameter.paramName);
4255+
}
4256+
}
4257+
}
4258+
42664259
protected void setParameterNullable(CodegenParameter parameter, CodegenProperty property) {
42674260
parameter.nullable = property.nullable;
42684261
}

src/main/resources/handlebars/typescript-angular/api.service.mustache

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ export class {{classname}} {
9797
{{#parameters}}* @param {{paramName}} {{description}}
9898
{{/parameters}}*/
9999
{{! if you change this method signature, also change the version below }}
100-
public {{nickname}}({{#parameters}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/parameters}}{{^useHttpClient}}{{#hasParams}}, {{/hasParams}}extraHttpRequestParams?: RequestOptionsArgs{{/useHttpClient}}): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}{}{{/returnType}}> {
101-
return this.{{nickname}}WithHttpInfo({{#parameters}}{{paramName}}, {{/parameters}}extraHttpRequestParams)
100+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/parameters}}{{^useHttpClient}}{{#hasParams}}, {{/hasParams}}extraHttpRequestParams?: RequestOptionsArgs{{/useHttpClient}}): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}{}{{/returnType}}> {
101+
return this.{{nickname}}{{#isForm}}Form{{/isForm}}WithHttpInfo({{#parameters}}{{paramName}}, {{/parameters}}extraHttpRequestParams)
102102
.map((response: Response) => {
103103
if (response.status === 204) {
104104
return undefined;
@@ -127,10 +127,10 @@ export class {{classname}} {
127127
* @param reportProgress flag to report request and response progress.{{/useHttpClient}}
128128
*/
129129
{{#useHttpClient}}
130-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'body', reportProgress?: boolean): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>;
131-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
132-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
133-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe: any = 'body', reportProgress: boolean = false ): Observable<any> {
130+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'body', reportProgress?: boolean): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>;
131+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
132+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
133+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe: any = 'body', reportProgress: boolean = false ): Observable<any> {
134134
{{/useHttpClient}}
135135
{{^useHttpClient}}
136136
public {{nickname}}WithHttpInfo({{#parameters}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/parameters}}extraHttpRequestParams?: RequestOptionsArgs): Observable<Response> {
@@ -258,6 +258,7 @@ export class {{classname}} {
258258
'{{{mediaType}}}'{{#hasMore}},{{/hasMore}}
259259
{{/consumes}}
260260
];
261+
{{^isForm}}
261262
{{#bodyParam}}
262263
const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);
263264
if (httpContentTypeSelected != undefined) {
@@ -269,7 +270,9 @@ export class {{classname}} {
269270
{{/useHttpClient}}
270271
}
271272
{{/bodyParam}}
273+
{{/isForm}}
272274

275+
{{#isForm}}
273276
{{#hasFormParams}}
274277
const canConsumeForm = this.canConsumeForm(consumes);
275278

@@ -319,15 +322,20 @@ export class {{classname}} {
319322
{{/formParams}}
320323

321324
{{/hasFormParams}}
325+
{{/isForm}}
322326
{{#useHttpClient}}
323327
return this.httpClient.request{{^isResponseFile}}<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>{{/isResponseFile}}('{{httpMethod}}',`${this.basePath}{{{path}}}`,
324328
{
329+
{{^isForm}}
325330
{{#bodyParam}}
326331
body: {{paramName}},
327332
{{/bodyParam}}
333+
{{/isForm}}
334+
{{#isForm}}
328335
{{#hasFormParams}}
329336
body: convertFormParamsToString ? formParams.toString() : formParams,
330337
{{/hasFormParams}}
338+
{{/isForm}}
331339
{{#hasQueryParams}}
332340
params: queryParameters,
333341
{{/hasQueryParams}}
@@ -345,12 +353,16 @@ export class {{classname}} {
345353
let requestOptions: RequestOptionsArgs = new RequestOptions({
346354
method: '{{httpMethod}}',
347355
headers: headers,
356+
{{^isForm}}
348357
{{#bodyParam}}
349358
body: {{paramName}} == null ? '' : JSON.stringify({{paramName}}), // https://github.com/angular/angular/issues/10612
350359
{{/bodyParam}}
360+
{{/isForm}}
361+
{{#isForm}}
351362
{{#hasFormParams}}
352363
body: convertFormParamsToString ? formParams.toString() : formParams,
353364
{{/hasFormParams}}
365+
{{/isForm}}
354366
{{#isResponseFile}}
355367
responseType: ResponseContentType.Blob,
356368
{{/isResponseFile}}

src/main/resources/mustache/typescript-angular/api.service.mustache

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ export class {{classname}} {
9797
{{#parameters}}* @param {{paramName}} {{description}}
9898
{{/parameters}}*/
9999
{{! if you change this method signature, also change the version below }}
100-
public {{nickname}}({{#parameters}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/parameters}}{{^useHttpClient}}{{#hasParams}}, {{/hasParams}}extraHttpRequestParams?: RequestOptionsArgs{{/useHttpClient}}): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}{}{{/returnType}}> {
101-
return this.{{nickname}}WithHttpInfo({{#parameters}}{{paramName}}, {{/parameters}}extraHttpRequestParams)
100+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/parameters}}{{^useHttpClient}}{{#hasParams}}, {{/hasParams}}extraHttpRequestParams?: RequestOptionsArgs{{/useHttpClient}}): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}{}{{/returnType}}> {
101+
return this.{{nickname}}{{#isForm}}Form{{/isForm}}WithHttpInfo({{#parameters}}{{paramName}}, {{/parameters}}extraHttpRequestParams)
102102
.map((response: Response) => {
103103
if (response.status === 204) {
104104
return undefined;
@@ -127,10 +127,10 @@ export class {{classname}} {
127127
* @param reportProgress flag to report request and response progress.{{/useHttpClient}}
128128
*/
129129
{{#useHttpClient}}
130-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'body', reportProgress?: boolean): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>;
131-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
132-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
133-
public {{nickname}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe: any = 'body', reportProgress: boolean = false ): Observable<any> {
130+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'body', reportProgress?: boolean): Observable<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>;
131+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
132+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
133+
public {{nickname}}{{#isForm}}Form{{/isForm}}({{#parameters}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/parameters}}observe: any = 'body', reportProgress: boolean = false ): Observable<any> {
134134
{{/useHttpClient}}
135135
{{^useHttpClient}}
136136
public {{nickname}}WithHttpInfo({{#parameters}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/parameters}}extraHttpRequestParams?: RequestOptionsArgs): Observable<Response> {
@@ -258,6 +258,7 @@ export class {{classname}} {
258258
'{{{mediaType}}}'{{#hasMore}},{{/hasMore}}
259259
{{/consumes}}
260260
];
261+
{{^isForm}}
261262
{{#bodyParam}}
262263
const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);
263264
if (httpContentTypeSelected != undefined) {
@@ -269,19 +270,21 @@ export class {{classname}} {
269270
{{/useHttpClient}}
270271
}
271272
{{/bodyParam}}
273+
{{/isForm}}
272274

275+
{{#isForm}}
273276
{{#hasFormParams}}
274277
const canConsumeForm = this.canConsumeForm(consumes);
275278

276279
let formParams: { append(param: string, value: any): void; };
277280
let useForm = false;
278281
let convertFormParamsToString = false;
279282
{{#formParams}}
280-
{{#isFile}}
283+
{{#isBinary}}
281284
// use FormData to transmit files using content-type "multipart/form-data"
282285
// see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data
283286
useForm = canConsumeForm;
284-
{{/isFile}}
287+
{{/isBinary}}
285288
{{/formParams}}
286289
if (useForm) {
287290
formParams = new FormData();
@@ -319,15 +322,20 @@ export class {{classname}} {
319322
{{/formParams}}
320323

321324
{{/hasFormParams}}
325+
{{/isForm}}
322326
{{#useHttpClient}}
323327
return this.httpClient.request{{^isResponseFile}}<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>{{/isResponseFile}}('{{httpMethod}}',`${this.basePath}{{{path}}}`,
324328
{
329+
{{^isForm}}
325330
{{#bodyParam}}
326331
body: {{paramName}},
327332
{{/bodyParam}}
333+
{{/isForm}}
334+
{{#isForm}}
328335
{{#hasFormParams}}
329336
body: convertFormParamsToString ? formParams.toString() : formParams,
330337
{{/hasFormParams}}
338+
{{/isForm}}
331339
{{#hasQueryParams}}
332340
params: queryParameters,
333341
{{/hasQueryParams}}
@@ -345,12 +353,16 @@ export class {{classname}} {
345353
let requestOptions: RequestOptionsArgs = new RequestOptions({
346354
method: '{{httpMethod}}',
347355
headers: headers,
356+
{{^isForm}}
348357
{{#bodyParam}}
349358
body: {{paramName}} == null ? '' : JSON.stringify({{paramName}}), // https://github.com/angular/angular/issues/10612
350359
{{/bodyParam}}
360+
{{/isForm}}
361+
{{#isForm}}
351362
{{#hasFormParams}}
352363
body: convertFormParamsToString ? formParams.toString() : formParams,
353364
{{/hasFormParams}}
365+
{{/isForm}}
354366
{{#isResponseFile}}
355367
responseType: ResponseContentType.Blob,
356368
{{/isResponseFile}}

0 commit comments

Comments
 (0)