Skip to content

Commit d58ad9c

Browse files
Fix for Issue #8766
1 parent aa87e4f commit d58ad9c

File tree

3 files changed

+39
-19
lines changed

3 files changed

+39
-19
lines changed

modules/swagger-codegen/src/main/resources/go/client.mustache

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ func (c *APIClient) prepareRequest(
185185
}
186186

187187
// add form parameters and file if available.
188-
if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
188+
if strings.HasPrefix(headerParams["Content-Type"], "multipart/form-data") && len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
189189
if body != nil {
190190
return nil, errors.New("Cannot specify postBody and multipart form at the same time.")
191191
}
@@ -224,6 +224,16 @@ func (c *APIClient) prepareRequest(
224224
w.Close()
225225
}
226226

227+
if strings.HasPrefix(headerParams["Content-Type"], "application/x-www-form-urlencoded") && len(formParams) > 0 {
228+
if body != nil {
229+
return nil, errors.New("Cannot specify postBody and x-www-form-urlencoded form at the same time.")
230+
}
231+
body = &bytes.Buffer{}
232+
body.WriteString(formParams.Encode())
233+
// Set Content-Length
234+
headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
235+
}
236+
227237
// Setup path and query parameters
228238
url, err := url.Parse(path)
229239
if err != nil {
@@ -465,4 +475,4 @@ func (e GenericSwaggerError) Body() []byte {
465475
// Model returns the unpacked model of the error
466476
func (e GenericSwaggerError) Model() interface{} {
467477
return e.model
468-
}
478+
}

samples/client/petstore/go/go-petstore/api/swagger.yaml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,6 @@ paths:
492492
responses:
493493
200:
494494
description: "successful operation"
495-
schema:
496-
type: "string"
497495
headers:
498496
X-Rate-Limit:
499497
type: "integer"
@@ -503,6 +501,8 @@ paths:
503501
type: "string"
504502
format: "date-time"
505503
description: "date in UTC when token expires"
504+
schema:
505+
type: "string"
506506
400:
507507
description: "Invalid username/password supplied"
508508
/user/logout:
@@ -1105,15 +1105,15 @@ definitions:
11051105
complete:
11061106
type: "boolean"
11071107
default: false
1108+
xml:
1109+
name: "Order"
11081110
example:
11091111
petId: 6
11101112
quantity: 1
11111113
id: 0
11121114
shipDate: "2000-01-23T04:56:07.000+00:00"
11131115
complete: false
11141116
status: "placed"
1115-
xml:
1116-
name: "Order"
11171117
Category:
11181118
type: "object"
11191119
properties:
@@ -1122,11 +1122,11 @@ definitions:
11221122
format: "int64"
11231123
name:
11241124
type: "string"
1125+
xml:
1126+
name: "Category"
11251127
example:
11261128
name: "name"
11271129
id: 6
1128-
xml:
1129-
name: "Category"
11301130
User:
11311131
type: "object"
11321132
properties:
@@ -1150,6 +1150,8 @@ definitions:
11501150
type: "integer"
11511151
format: "int32"
11521152
description: "User Status"
1153+
xml:
1154+
name: "User"
11531155
example:
11541156
firstName: "firstName"
11551157
lastName: "lastName"
@@ -1159,8 +1161,6 @@ definitions:
11591161
id: 0
11601162
email: "email"
11611163
username: "username"
1162-
xml:
1163-
name: "User"
11641164
Tag:
11651165
type: "object"
11661166
properties:
@@ -1169,11 +1169,11 @@ definitions:
11691169
format: "int64"
11701170
name:
11711171
type: "string"
1172+
xml:
1173+
name: "Tag"
11721174
example:
11731175
name: "name"
11741176
id: 1
1175-
xml:
1176-
name: "Tag"
11771177
Pet:
11781178
type: "object"
11791179
required:
@@ -1210,6 +1210,8 @@ definitions:
12101210
- "available"
12111211
- "pending"
12121212
- "sold"
1213+
xml:
1214+
name: "Pet"
12131215
example:
12141216
photoUrls:
12151217
- "photoUrls"
@@ -1225,8 +1227,6 @@ definitions:
12251227
- name: "name"
12261228
id: 1
12271229
status: "available"
1228-
xml:
1229-
name: "Pet"
12301230
ApiResponse:
12311231
type: "object"
12321232
properties:
@@ -1253,9 +1253,9 @@ definitions:
12531253
return:
12541254
type: "integer"
12551255
format: "int32"
1256-
description: "Model for testing reserved words"
12571256
xml:
12581257
name: "Return"
1258+
description: "Model for testing reserved words"
12591259
Name:
12601260
required:
12611261
- "name"
@@ -1272,19 +1272,19 @@ definitions:
12721272
123Number:
12731273
type: "integer"
12741274
readOnly: true
1275-
description: "Model for testing model name same as property name"
12761275
xml:
12771276
name: "Name"
1277+
description: "Model for testing model name same as property name"
12781278
200_response:
12791279
properties:
12801280
name:
12811281
type: "integer"
12821282
format: "int32"
12831283
class:
12841284
type: "string"
1285-
description: "Model for testing model name starting with number"
12861285
xml:
12871286
name: "Name"
1287+
description: "Model for testing model name starting with number"
12881288
ClassModel:
12891289
properties:
12901290
_class:

samples/client/petstore/go/go-petstore/client.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ func (c *APIClient) prepareRequest(
197197
}
198198

199199
// add form parameters and file if available.
200-
if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
200+
if strings.HasPrefix(headerParams["Content-Type"], "multipart/form-data") && len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
201201
if body != nil {
202202
return nil, errors.New("Cannot specify postBody and multipart form at the same time.")
203203
}
@@ -236,6 +236,16 @@ func (c *APIClient) prepareRequest(
236236
w.Close()
237237
}
238238

239+
if strings.HasPrefix(headerParams["Content-Type"], "application/x-www-form-urlencoded") && len(formParams) > 0 {
240+
if body != nil {
241+
return nil, errors.New("Cannot specify postBody and x-www-form-urlencoded form at the same time.")
242+
}
243+
body = &bytes.Buffer{}
244+
body.WriteString(formParams.Encode())
245+
// Set Content-Length
246+
headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
247+
}
248+
239249
// Setup path and query parameters
240250
url, err := url.Parse(path)
241251
if err != nil {
@@ -477,4 +487,4 @@ func (e GenericSwaggerError) Body() []byte {
477487
// Model returns the unpacked model of the error
478488
func (e GenericSwaggerError) Model() interface{} {
479489
return e.model
480-
}
490+
}

0 commit comments

Comments
 (0)