fix(#3161): Prevent duplicate _links in allOf child schemas #3199
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue Description
This PR resolves Issue #3161 where the
_linksfield was incorrectly duplicated in child schemas when usingallOfcomposition withRepresentationModel.Problem:
RepresentationModelhad duplicate_linksfieldsallOfcomposition automatically inherits parent properties, so_linksshouldn't be redefinedReproduction:
See springdoc-issue-3161-reproduction for a detailed demonstration of this bug.
Solution:
Modified
PolymorphicModelConverterto remove inherited_linksfrom child schema properties when usingallOfcomposition.Changes Made
Core Changes:
_linksfield from child schemas inallOfcompositionTest Coverage:
Test Methods:
testApp(): Full OpenAPI JSON validationtestTestDtoHasHateoasLinks(): Parent has_linkstestExtendedTestDtoAllOfInheritance(): ProperallOfstructuretestExtendedTestDtoNoLinksInOwnProperties(): No duplicate_links← Issue Wrong HAL _links are generated in sub type of a schema #3161 core validationtestExtendedTestDtoHasOwnProperties(): Child properties preservedBefore & After
Before (Bug):
After (Fixed):
Testing
Fixes #3161
Test Result ( open api version 3.0.1 )
Test Result ( open api version 3.1.0 )
Additional Improvements
While fixing the
allOfissue, a defensive enhancement was added foroneOfcompositions:_linksinheritance principle tooneOfschemasoneOfoneOfusage (usually only contains$ref)This is a preventive measure to maintain consistency across all composition types. Primary validation remains focused on the
allOfissue reported in #3161.