Skip to content

[Go] fix validation of property names when a model has required fields and doesn't allow additional properties #17267

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Dec 22, 2023

Conversation

ctreatma
Copy link
Contributor

@ctreatma ctreatma commented Nov 30, 2023

This updates the Go client generator so that, if a model has required fields but does not allow additional properties, the custom UnmarshalJSON function will return an error when the input JSON includes additional properties.

Fixes #17156

cc/ @antihax @grokify @kemokemo @jirikuncar @ph4r5h4d @lwj5 @wing328

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package 
    ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.1.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@ctreatma ctreatma force-pushed the required-without-additional branch 2 times, most recently from b1aadc2 to a41041c Compare December 14, 2023 16:56
@dahu33
Copy link

dahu33 commented Apr 28, 2025

This PR added a critical bug described here: #21164

Also, if I may comment here, it is not because additionalProperties is set to false in the OpenAPI spec that a generated client should completely fail if the server returns extra fields. In real-world APIs, it is common for servers to evolve and add new properties over time.

The use of DisallowUnknownFields() in generated client code is extremely dangerous because:

  • It prevents clients from tolerating new fields added to the server response, making clients extremely fragile.
  • It breaks backward compatibility: older clients interacting with newer servers will crash when they encounter unexpected fields.
  • It fundamentally contradicts robust client design principles, where clients should ignore unknown fields rather than fail.

I would propose to remove DisallowUnknownFields() from the Go client templates as soon as possible to restore proper resilience and compatibility when dealing with evolving APIs (and embedded structs).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BUG][Go] Structure parsing with failing on unknown properties stopped working in v7.1.0
3 participants