feat: add Spring Boot 4 demos (easy-paging 0.5.x line)#39
Merged
Conversation
Adds 4 new SB4 demos alongside the existing 4 SB3 demos. Together
they cover both starter release lines:
easy-paging-sb4-demo ← @AutoPaginate (H2)
easy-paging-sb4-keyset-demo ← @KeysetPaginate (H2)
easy-paging-sb4-postgres-demo ← real PG via Docker + Testcontainers
easy-paging-sb4-reactive-demo ← WebFlux + R2DBC + Docker PG
Each is a copy of its SB3 counterpart with these SB4-targeted bumps:
- spring-boot Gradle plugin 3.5.3 → 4.0.6
- io.spring.dependency-management 1.1.6 → 1.1.7
- easy-paging-spring-boot-starter 0.4.0 → 0.5.0 (the new SB4 line)
- spring-boot-starter-test split: add starter-webmvc-test for MVC
demos, starter-webflux-test for the reactive demo (SB4 modularization
moved @AutoConfigureMockMvc / @AutoConfigureWebTestClient out of the
catch-all spring-boot-test-autoconfigure into dedicated starters).
- Testcontainers 2.x renames (postgres / reactive demos):
org.testcontainers:postgresql → testcontainers-postgresql
org.testcontainers:junit-jupiter → testcontainers-junit-jupiter
org.testcontainers:r2dbc → testcontainers-r2dbc
+ explicit testcontainers-bom:2.0.5 platform (SB4 BOM only manages
the core artifact, not modules).
- Jackson 3 imports across test code:
com.fasterxml.jackson.databind.{ObjectMapper,JsonNode}
→ tools.jackson.databind.{ObjectMapper,JsonNode}
- SB4 modularization test-autoconfigure imports:
org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
→ org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc
org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient
→ org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient
Plus reactive-specific cleanup: dropped PagingWebFluxConfig, since
starter 0.5.0's ReactiveEasyPagingWebFluxAutoConfiguration now
auto-registers ReactivePageableHandlerMethodArgumentResolver +
ReactiveSortHandlerMethodArgumentResolver. Demos can simply declare
`Pageable pageable` parameters with no per-app wiring — that was a
gap the SB3 line had that SB4 starter 0.5.0 closes.
Dependabot config restructured: split into two gradle ecosystem
entries.
- SB3 demos: keep the existing ignore rules holding Spring majors
on the 3.x line, so 0.4.x maintenance demos never accidentally
jump to SB4.
- SB4 demos: NO Spring-major hold (Dependabot is free to roll
through SB4 patch/minor/major within the SB4 family). Only the
Gradle wrapper major is still gated for hand verification.
Top-level README split into three sections: "easy-paging — Spring
Boot 4 (0.5.x)" (recommended), "easy-paging — Spring Boot 3
maintenance (0.4.x)" (still supported), and "ssrf-guard". Both
English and Korean READMEs updated symmetrically.
Each new SB4 demo's README gets a callout pointing at its SB3
counterpart, so cross-line discovery works in either direction.
…8.14+) The Spring Boot 4 Gradle plugin enforces 'Gradle 8.x (8.14 or later) or 9.x'. Our existing demos shipped wrapper 8.10.2 which is fine for the SB3 line but blocks SB4 plugin from even applying — first PR run on this branch failed at plugin resolution time with: Spring Boot plugin requires Gradle 8.x (8.14 or later) or 9.x. The current version is Gradle 8.10.2 Bump just the 4 sb4 demos to 8.14.3 (latest 8.14.x patch). The SB3 demos stay on 8.10.2 — their plugin doesn't require the bump and changing them would be unrelated noise.
…figs
Jackson 3's SerializationFeature enum no longer has the
WRITE_DATES_AS_TIMESTAMPS constant — datetime handling moved to a
separate DateTimeFeature, and ISO-8601 is the default. The legacy
yml block:
spring:
jackson:
serialization:
write-dates-as-timestamps: false
…now fails Spring Boot 4 property binding with:
Failed to bind properties under 'spring.jackson.serialization'
to Map<tools.jackson.databind.SerializationFeature, Boolean>:
No enum constant SerializationFeature.write-dates-as-timestamps
Since ISO-8601 is the SB4 default anyway, the block is just deleted
(rather than ported to wherever Jackson 3 surfaces the equivalent
switch). All 4 SB4 demos cleaned to be safe — only keyset actually
had the block, the regex match is a no-op for the others.
Verified locally: easy-paging-sb4-keyset-demo ./gradlew test is now
BUILD SUCCESSFUL.
3 tasks
jlc488
added a commit
that referenced
this pull request
May 23, 2026
…DMEs (#55) Five spots where the README prose lagged behind the actual build.gradle.kts pin. The build files were correct; the README narrative just got copy-pasted from the SB3 source demo (or, for ssrf-guard, only half-bumped during the 3.0.1 -> 3.1.0 sweep) and never re-grepped. SB4 demos (4 files) — "Files of interest" table said the dep is :easy-paging-spring-boot-starter:0.4.0 but build.gradle.kts pins :0.5.0: easy-paging-sb4-demo/README.md line 76: 0.4.0 -> 0.5.0 easy-paging-sb4-demo/README.ko.md line 76: 0.4.0 -> 0.5.0 easy-paging-sb4-keyset-demo/README.md line 92: 0.4.0 -> 0.5.0 easy-paging-sb4-keyset-demo/README.ko.md line 92: 0.4.0 -> 0.5.0 Root cause: when the four SB4 demos were branched off the SB3 demos in PR #39, build.gradle.kts and the README header callout ("Spring Boot 4 line. ... 0.5.x line") were correctly retargeted to 0.5.0, but the detail table at the bottom of the README ("the only dependency the demo adds...") was left at 0.4.0. The English ones for postgres/reactive don't repeat the version in prose so they were unaffected. ssrf-guard demo (1 file) — only the Korean README, "Files of interest" row listed three sub-artifacts but mixed two versions: ssrf-guard-demo/README.ko.md line 127: :ssrf-guard:3.1.0, :ssrf-guard-resttemplate:3.0.1, :ssrf-guard-webclient:3.0.1 -> :ssrf-guard:3.1.0, :ssrf-guard-resttemplate:3.1.0, :ssrf-guard-webclient:3.1.0 Root cause: PR #52 ("ssrf-guard 3.0.1 -> 3.1.0 + langchain4j demo") bumped the README header and the meta-artifact mention but only the first of the three sub-artifact lines on line 127 of the KO file; the English README on line 128 got all three. KO half-update slipped through review. All SB3 demo READMEs that still reference :0.4.0 are intentional - the SB3 demos pin to the 0.4.x maintenance line on purpose. Verified by grep that no other build.gradle.kts vs README mismatches remain.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Adds 4 new SB4 demos alongside the existing 4 SB3 demos. Together they cover both starter release lines:
Each is a copy of its SB3 counterpart, retargeted at the v0.5.0 line released by easy-paging-spring-boot-starter#50.
What changed in each SB4 demo vs its SB3 sibling
Dependabot policy
Restructured `.github/dependabot.yml` into two gradle ecosystem entries:
This means a future SB5 release would land in the SB4 entry's queue as a major bump on a dedicated PR, while 0.4.x demos stay safely on the SB3 line.
Top-level README
Split into three sections, both English and Korean kept symmetric:
Each SB4 demo's own README gets a callout linking to its SB3 counterpart for cross-line discoverability (both directions).
CI expectation
The `detect` job should pick up exactly the 4 new `easy-paging-sb4-*-demo/` directories (and the postgres/reactive ones will pull `postgres:16-alpine` for Testcontainers). All other demos should be skipped because nothing else changed.
Test plan