Changelog¶
All notable changes to easy-paging are documented here. The format is based on Keep a Changelog, and the project follows Semantic Versioning.
For the canonical, machine-readable source see CHANGELOG.md in the repository.
[0.2.0] — 2026-05-18¶
Added¶
easy-paging.one-indexed-pagesconfiguration option (defaultfalse). Whentrue, page numbers are 1-based on both request and response —?page=1is the first page, response shows"page": 1. See Sorting & Page Numbering for the full contract.PageResponse.withOneIndexedPages()— pure transform invoked by the aspect; also usable directly when constructingPageResponsemanually.- API (Javadoc) reference page linking to javadoc.io with a quick map of the main public types.
Changed¶
- Sorting & Page Numbering guide now documents the new option instead of describing it as a future plan.
- Configuration reference lists
one-indexed-pagesalongside the other tunables.
Notes¶
- Backward compatible — default behavior is 0-based, identical to v0.1.x. Existing consumers do not need to opt in.
[0.1.2] — 2026-05-17¶
Added¶
- This documentation site at easy-paging.devslab.kr — built with MkDocs Material, 14 pages × 2 languages, auto-deployed on every push to
main. - README link to the docs site (both languages).
Changed¶
- POM
<url>now points here (the docs site) instead of the GitHub repository. The "Project" link on Maven Central listings will lead first-time visitors here.
Notes¶
- No functional changes. Consumers do not need to upgrade unless they want the new POM URL in their dependency tooling.
[0.1.1] — 2026-05-15¶
Added¶
- HTTP 400 for invalid sort —
?sort=name;DROP TABLEis now rejected with400 Bad Requestinstead of bubbling up as a generic500. The aspect wrapsIllegalArgumentExceptionfromSortConverterinResponseStatusException(BAD_REQUEST). - JaCoCo coverage —
./gradlew jacocoTestReportemits XML + HTML reports. CI uploads to Codecov on every push tomain. - Coverage and CI badges in both READMEs.
- New integration tests:
AutoPaginateWebMvcIntegrationTest— exercises the aspect through the full Spring MVC stack (happy path, multi-column sort, injection rejection, ThreadLocal cleanup, oversize clamping).PageResponseFactoryIntegrationTest— verifies that a registeredPageResponseFactorybean replaces the default envelope.
Changed¶
- README (both languages) clarifies the 0-based page numbering convention and the fact that
mybatis-spring-boot-starteris not transitive (consumers add it explicitly). - Aspect cleanup is unified: both
SortConverterfailures and mapper exceptions release the PageHelperThreadLocalthrough a singlefinally. - Test fixture
data.sqlresets the identity sequence (TRUNCATE … RESTART IDENTITY) so repeated context starts during a test run see deterministic IDs.
Coverage¶
- Line: 86 % · Branch: 71 % · 43 tests across unit + integration.
[0.1.0] — 2026-05-12¶
Added¶
@AutoPaginateaspect for offset pagination driven by Spring DataPageable, backed by PageHelper. Clamps page size, propagates sort, cleans up the PageHelperThreadLocalinfinally.PageResponse<T>envelope (Spring Data-shaped, Jackson-friendly).SortConverterwith a strict identifier whitelist (rejects SQL injection via thesortquery parameter).@KeysetPaginate+KeysetRequestargument resolver +KeysetPage<T>envelope for cursor-based pagination.Cursor/CursorCodec— Base64-URL JSON tokens with optional HMAC-SHA256 signing, payload size cap, tamper detection.ReactivePagingSupportfor using PageHelper from Reactor code on a blocking-IO scheduler.PageResponseFactorySPI for overriding the default response envelope.- Spring Boot auto-configuration:
EasyPagingAutoConfiguration(core)EasyPagingWebMvcConfiguration(servlet — argument resolver)ReactiveEasyPagingAutoConfiguration(reactor marker)
- Configuration metadata for IDE auto-completion of
easy-paging.*properties. - GitHub Actions workflows for CI and Maven Central release.