Skip to content

Commit da13013

Browse files
authored
[Go] fix validation of property names when a model has required fields and doesn't allow additional properties (#17267)
* update template for required field validation when additional properties are not allowed * regenerate samples * move bytes import from template to GoClientCodegen * regenerate samples * add test for model with required fields and additionalProperties: false
1 parent 63f09ee commit da13013

77 files changed

Lines changed: 319 additions & 254 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,8 +499,14 @@ public ModelsMap postProcessModels(ModelsMap objs) {
499499
addedFmtImport = true;
500500
}
501501

502-
if (!addedFmtImport && model.hasRequired) {
503-
imports.add(createMapping("import", "fmt"));
502+
if (model.hasRequired) {
503+
if (!model.isAdditionalPropertiesTrue) {
504+
imports.add(createMapping("import", "bytes"));
505+
}
506+
507+
if (!addedFmtImport) {
508+
imports.add(createMapping("import", "fmt"));
509+
}
504510
}
505511

506512
// additionalProperties: true and parent

modules/openapi-generator/src/main/resources/go/model_simple.mustache

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -340,11 +340,11 @@ func (o {{classname}}) ToMap() (map[string]interface{}, error) {
340340
}
341341
342342
{{#isAdditionalPropertiesTrue}}
343-
func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
343+
func (o *{{{classname}}}) UnmarshalJSON(data []byte) (err error) {
344344
{{/isAdditionalPropertiesTrue}}
345345
{{^isAdditionalPropertiesTrue}}
346346
{{#hasRequired}}
347-
func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
347+
func (o *{{{classname}}}) UnmarshalJSON(data []byte) (err error) {
348348
{{/hasRequired}}
349349
{{/isAdditionalPropertiesTrue}}
350350
{{#hasRequired}}
@@ -359,7 +359,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
359359
360360
allProperties := make(map[string]interface{})
361361
362-
err = json.Unmarshal(bytes, &allProperties)
362+
err = json.Unmarshal(data, &allProperties)
363363
364364
if err != nil {
365365
return err;
@@ -391,7 +391,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
391391
392392
var{{{classname}}}WithoutEmbeddedStruct := {{{classname}}}WithoutEmbeddedStruct{}
393393
394-
err = json.Unmarshal(bytes, &var{{{classname}}}WithoutEmbeddedStruct)
394+
err = json.Unmarshal(data, &var{{{classname}}}WithoutEmbeddedStruct)
395395
if err == nil {
396396
var{{{classname}}} := _{{{classname}}}{}
397397
{{#vars}}
@@ -404,7 +404,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
404404
405405
var{{{classname}}} := _{{{classname}}}{}
406406
407-
err = json.Unmarshal(bytes, &var{{{classname}}})
407+
err = json.Unmarshal(data, &var{{{classname}}})
408408
if err == nil {
409409
o.{{{parent}}} = var{{{classname}}}.{{{parent}}}
410410
} else {
@@ -413,7 +413,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
413413
414414
additionalProperties := make(map[string]interface{})
415415
416-
if err = json.Unmarshal(bytes, &additionalProperties); err == nil {
416+
if err = json.Unmarshal(data, &additionalProperties); err == nil {
417417
{{#vars}}
418418
delete(additionalProperties, "{{{baseName}}}")
419419
{{/vars}}
@@ -444,7 +444,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
444444
{{#isMap}}
445445
var{{{classname}}} := _{{{classname}}}{}
446446
447-
err = json.Unmarshal(bytes, &var{{{classname}}})
447+
err = json.Unmarshal(data, &var{{{classname}}})
448448
449449
if err != nil {
450450
return err
@@ -454,7 +454,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
454454
455455
additionalProperties := make(map[string]interface{})
456456
457-
if err = json.Unmarshal(bytes, &additionalProperties); err == nil {
457+
if err = json.Unmarshal(data, &additionalProperties); err == nil {
458458
{{#vars}}
459459
delete(additionalProperties, "{{{baseName}}}")
460460
{{/vars}}
@@ -467,7 +467,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
467467
{{^parent}}
468468
var{{{classname}}} := _{{{classname}}}{}
469469
470-
err = json.Unmarshal(bytes, &var{{{classname}}})
470+
err = json.Unmarshal(data, &var{{{classname}}})
471471
472472
if err != nil {
473473
return err
@@ -477,7 +477,7 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
477477
478478
additionalProperties := make(map[string]interface{})
479479
480-
if err = json.Unmarshal(bytes, &additionalProperties); err == nil {
480+
if err = json.Unmarshal(data, &additionalProperties); err == nil {
481481
{{#vars}}
482482
delete(additionalProperties, "{{{baseName}}}")
483483
{{/vars}}
@@ -495,7 +495,9 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
495495
{{#hasRequired}}
496496
var{{{classname}}} := _{{{classname}}}{}
497497
498-
err = json.Unmarshal(bytes, &var{{{classname}}})
498+
decoder := json.NewDecoder(bytes.NewReader(data))
499+
decoder.DisallowUnknownFields()
500+
err = decoder.Decode(&var{{{classname}}})
499501
500502
if err != nil {
501503
return err
@@ -509,8 +511,8 @@ func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
509511
{{/hasRequired}}
510512
{{/isAdditionalPropertiesTrue}}
511513
{{#isArray}}
512-
func (o *{{{classname}}}) UnmarshalJSON(bytes []byte) (err error) {
513-
return json.Unmarshal(bytes, &o.Items)
514+
func (o *{{{classname}}}) UnmarshalJSON(data []byte) (err error) {
515+
return json.Unmarshal(data, &o.Items)
514516
}
515517
516518
{{/isArray}}

samples/client/echo_api/go/model_pet.go

Lines changed: 6 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)