Skip to content

Commit 10480ad

Browse files
committed
[go-server] Set default values in object properties
When a default value is set for an object property, ensure it is set into the struct before decoding the JSON body. Fix #4579
1 parent b23dcbd commit 10480ad

Some content is hidden

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

47 files changed

+276
-24
lines changed

modules/openapi-generator/src/main/resources/go-server/controller-api.mustache

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,12 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
591591
{{paramName}}Param := r.Header.Get("{{baseName}}")
592592
{{/isHeaderParam}}
593593
{{#isBodyParam}}
594+
{{#isArray}}
594595
{{paramName}}Param := {{dataType}}{}
596+
{{/isArray}}
597+
{{^isArray}}
598+
{{paramName}}Param := New{{dataType}}WithDefaults()
599+
{{/isArray}}
595600
d := json.NewDecoder(r.Body)
596601
{{^isAdditionalPropertiesTrue}}
597602
d.DisallowUnknownFields()

modules/openapi-generator/src/main/resources/go-server/model.mustache

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,27 @@ type {{classname}} struct {
7474
{{/deprecated}}
7575
{{name}} {{#isNullable}}*{{/isNullable}}{{{dataType}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
7676
{{/vars}}
77-
}{{/isEnum}}
77+
}
78+
79+
{{^isArray}}
80+
// New{{classname}}WithDefaults instantiates a new {{classname}} object
81+
// This constructor will only assign default values to properties that have it defined,
82+
// but it doesn't guarantee that properties required by API are set
83+
func New{{classname}}WithDefaults() {{classname}} {
84+
this := {{classname}}{}
85+
{{#vars}}
86+
{{#defaultValue}}
87+
{{^isArray}}
88+
this.{{name}} = {{#isBoolean}}{{{.}}}{{/isBoolean}}{{#isNumeric}}{{{.}}}{{/isNumeric}}{{^isBoolean}}{{^isNumeric}}"{{{.}}}"{{/isNumeric}}{{/isBoolean}}
89+
{{/isArray}}
90+
{{/defaultValue}}
91+
{{#isModel}}
92+
{{#isNullable}}*{{/isNullable}}this.{{name}} = New{{dataType}}WithDefaults()
93+
{{/isModel}}
94+
{{/vars}}
95+
return this
96+
}{{/isArray}}
97+
{{/isEnum}}
7898

7999
// Assert{{classname}}Required checks if the required fields are not zero-ed
80100
func Assert{{classname}}Required(obj {{classname}}) error {

samples/openapi3/server/petstore/go/go-petstore/go/api_pet.go

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

samples/openapi3/server/petstore/go/go-petstore/go/api_store.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/openapi3/server/petstore/go/go-petstore/go/api_user.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_an_object.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_api_response.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_category.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_order.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_order_info.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_pet.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_special_info.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_tag.go

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

samples/openapi3/server/petstore/go/go-petstore/go/model_user.go

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

samples/server/others/go-server/no-body-path-params/go/api_body.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/others/go-server/no-body-path-params/go/api_both.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/others/go-server/no-body-path-params/go/model_body_request.go

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

samples/server/petstore/go-api-server/go/api_pet.go

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

samples/server/petstore/go-api-server/go/api_store.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/petstore/go-api-server/go/api_user.go

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

samples/server/petstore/go-api-server/go/model_an_object.go

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

samples/server/petstore/go-api-server/go/model_api_response.go

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

samples/server/petstore/go-api-server/go/model_category.go

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

samples/server/petstore/go-api-server/go/model_colour.go

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

samples/server/petstore/go-api-server/go/model_gender.go

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

samples/server/petstore/go-api-server/go/model_order.go

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

samples/server/petstore/go-api-server/go/model_order_info.go

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

0 commit comments

Comments
 (0)