Spring Data REST: non-exported association schemas renamed to <Name>Response since 3.1.1 (breaking), applied inconsistently
Maintainer thường phản hồi trong vòng 1 ngày
@wn1331 đang làm issue này rồi.
Từ ngày 11/11/2026.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- java, kotlin, openapi, spring-boot
- Lĩnh vực
- backend-api-design
Hướng nghiên cứu
Start with SpringDocDataRestUtils.updateResponseSchemaProperty and the entityInoMap lookup keyed by getSimpleName(), as introduced by PR #3334. Reproduce with an entity that has a non-exported repository, comparing a Set association, a nullable single association, and a non-null single association in the generated /v3/api-docs. Done means the naming rule is consistent across those shapes and @Schema(name) is honoured, which first requires agreeing on the intended behaviour with maintainers.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
After upgrading springdoc-openapi-starter-webmvc-ui from 3.0.2 to 3.1.1 (still present in 3.2.0), component schemas for entities that are not exported repositories are renamed. For example, CustomerRelationship becomes CustomerRelationshipResponse in the generated spec. This changes generated client type names in a minor release.
This comes from #3334 (fix for #3136), which makes SpringDocDataRestUtils.updateResponseSchemaProperty rewrite such association properties to a <Name>Response copy. The filtering itself makes sense, but the side effects are surprising:
-
Breaking rename in a minor version. Nothing in #3334 or the release notes mentions that schema names change.
-
Inconsistent behaviour. Only two property shapes are rewritten: a direct
$refanditems(collections).Set<CustomerRelationship>is rewritten, so the spec containsCustomerRelationshipResponse.- A nullable single association (
var region: CustomerRegion?) is emitted in OpenAPI 3.1 asoneOf: [{$ref: CustomerRegion}, {type: null}]. It is skipped, so the plainCustomerRegionstays. - A non-null single association (
CustomerRegion) is rewritten toCustomerRegionResponse.
Similar relations therefore get different names depending on cardinality and nullability.
-
@Schema(name)is only honoured if it differs from the class name.entityInoMapis keyed bydomainType.getSimpleName()and looked up with the schema name.@Schema(name = "CustomerRelationship")onCustomerRelationshipis ignored and the suffix is still added.@Schema(name = "Foo")works because the lookup misses and no copy is created.
To Reproduce
- Spring Boot 4.x,
spring-boot-starter-data-rest, springdoc 3.1.1 or 3.2.0, OpenAPI 3.1. - Entity
Customerwith:@OneToMany(fetch = FetchType.LAZY) var relationships: Set<CustomerRelationship> = emptySet() @ManyToOne(fetch = FetchType.LAZY) var region: CustomerRegion? = nullCustomerRelationshipandCustomerRegionare entities with no exported repository. - Compare
/v3/api-docson 3.0.2 and 3.1.1:- 3.0.2:
#/components/schemas/CustomerRelationship - 3.1.1+:
#/components/schemas/CustomerRelationshipResponse;regionstill referencesCustomerRegion.
- 3.0.2:
Expected behavior
- Schema names stay stable across a minor upgrade, or the change is documented as breaking.
- Handling is consistent for collections, nullable singles (
oneOf/allOfwrappers), and non-null singles. - An explicit
@Schema(name = …)is respected even when it equals the class name, or the suffix is configurable (for example a property to disable the rename).
Workaround
Customize the generated schemas yourself to rename or strip the suffix, or use a @Schema(name) that differs from the class name.
- Ngôn ngữ chính
- Java
- Star
- 3.7k
- Fork
- 605
- Merge trung bình
- 2 ngày 11 giờ
- Pull request đã merge (30 ngày)
- 17
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của springdoc/springdoc-openapi
-
MCP: OpenApiSchemaConverter drops types from OpenAPI 3.1 type arraysCó thể đã có người làm @mariodavid đã nhận 3 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 30/100
springdoc/springdoc-openapi#3427 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Add support for OpenAPI spec 3.2Đang mởenhancement upstream
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
springdoc/springdoc-openapi#3324 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement upstream
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
springdoc/springdoc-openapi#3309 · 4 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của springdoc/springdoc-openapi
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
line/centraldogma#1397 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
vert-x3/vertx-mail-client#268 ·
-
Startup can freeze while MigLayout's component wrapper runs its static initializer on the EDTĐang mởdesktop edt not responding
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 86/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
physical
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
antonyrag/ragleap-core#1339 ·