Skip to content

Commit cf212aa

Browse files
committed
fix: guard ValidPageable validator against Pageable.unpaged()
Calling getPageSize()/getPageNumber() on Pageable.unpaged() throws UnsupportedOperationException. Add an isPaged() check so unpaged requests pass validation without error.
1 parent 6be3da3 commit cf212aa

6 files changed

Lines changed: 26 additions & 0 deletions

File tree

modules/openapi-generator/src/main/resources/JavaSpring/validPageable.mustache

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ public @interface ValidPageable {
6666
return true;
6767
}
6868

69+
if (!pageable.isPaged()) {
70+
return true;
71+
}
72+
6973
boolean valid = true;
7074
context.disableDefaultConstraintViolation();
7175

modules/openapi-generator/src/main/resources/kotlin-spring/validPageable.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class PageableConstraintValidator : ConstraintValidator<ValidPageable, Pageable>
5353

5454
override fun isValid(pageable: Pageable?, context: ConstraintValidatorContext): Boolean {
5555
if (pageable == null) return true
56+
if (!pageable.isPaged) return true
5657
5758
var valid = true
5859
context.disableDefaultConstraintViolation()

samples/server/petstore/kotlin-springboot-sort-validation/src/main/kotlin/org/openapitools/configuration/ValidPageable.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class PageableConstraintValidator : ConstraintValidator<ValidPageable, Pageable>
5353

5454
override fun isValid(pageable: Pageable?, context: ConstraintValidatorContext): Boolean {
5555
if (pageable == null) return true
56+
if (!pageable.isPaged) return true
5657

5758
var valid = true
5859
context.disableDefaultConstraintViolation()

samples/server/petstore/kotlin-springboot-sort-validation/src/test/kotlin/org/openapitools/api/PetApiValidationTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,14 @@ class PetApiValidationTest {
9292
}.andExpect { status { isBadRequest() } }
9393
}
9494

95+
@Test
96+
fun `ValidPageable - unpaged Pageable is allowed (no params, no PageableDefault)`() {
97+
// When no pagination parameters are supplied and no @PageableDefault is configured,
98+
// Spring resolves Pageable.unpaged(). The validator must not throw and must return valid.
99+
mockMvc.get("${PetApi.BASE_PATH}${PetApi.PATH_FIND_PETS_WITH_SIZE_CONSTRAINT}")
100+
.andExpect { status { isOk() } }
101+
}
102+
95103
// ── @ValidPageable — size and page constraints combined ───────────────────
96104
// Endpoint: GET /pet/findWithPageAndSizeConstraint maxSize = 50, maxPage = 999
97105

samples/server/petstore/springboot-sort-validation/src/main/java/org/openapitools/configuration/ValidPageable.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ public boolean isValid(Pageable pageable, ConstraintValidatorContext context) {
6666
return true;
6767
}
6868

69+
if (!pageable.isPaged()) {
70+
return true;
71+
}
72+
6973
boolean valid = true;
7074
context.disableDefaultConstraintViolation();
7175

samples/server/petstore/springboot-sort-validation/src/test/java/org/openapitools/api/PetApiValidationTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ void validPageable_sizeExceedsMaximumReturns400() throws Exception {
9696
.andExpect(status().isBadRequest());
9797
}
9898

99+
@Test
100+
void validPageable_unpagedPageableIsAllowed() throws Exception {
101+
// When no pagination parameters are supplied and no @PageableDefault is configured,
102+
// Spring resolves Pageable.unpaged(). The validator must not throw and must return valid.
103+
mockMvc.perform(get(PetApi.PATH_FIND_PETS_WITH_SIZE_CONSTRAINT))
104+
.andExpect(status().isOk());
105+
}
106+
99107
// ── @ValidPageable — size and page constraints combined ───────────────────
100108
// Endpoint: GET /pet/findWithPageAndSizeConstraint maxSize = 50, maxPage = 999
101109

0 commit comments

Comments
 (0)