🔗
Pagination, Filtering & Sorting

Pagination Links (HATEOAS)

next, prev, first, last Links
💡 HATEOAS pagination links, EK NEWSPAPER ke, "NEXT PAGE →" aur "← PREVIOUS PAGE" BUTTONS jaise hain — READER (CLIENT) ko, KHUD, NEXT PAGE ka NUMBER, CALCULATE NAHI karna PADТA, LINK, DIRECTLY, CLICKABLE hai.

Spring HATEOAS library, PaginatedModel/PagedResourcesAssembler SE, RESPONSE mein, AUTOMATICALLY, self, first, next, prev, last LINKS, ADD kar deती hai — CLIENT ko, MANUALLY, page NUMBERS, CALCULATE karne ki, ZAROORAT NAHI, SIRF, PROVIDED LINK, FOLLOW karna PADТA hai.

YE APPROACH, ESPECIALLY, USEFUL hai, JAB, API, PUBLIC hai, aur, MULTIPLE, DIFFERENT CLIENTS, USE karte hain — PAGINATION LOGIC (jaise, page NUMBER, KAISE CALCULATE karein), SERVER-SIDE, EK HI JAGAH, MAINTAIN hoती hai, HAR CLIENT mein, REPEAT NAHI hoती.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>

@GetMapping
public PagedModel<ProductDto> getProducts(
        Pageable pageable, PagedResourcesAssembler<Product> assembler) {
    Page<Product> products = productRepository.findAll(pageable);
    return assembler.toModel(products.map(this::toDto));
}

// Response mein, AUTOMATICALLY:
// "_links": {
//   "first": { "href": "/api/products?page=0&size=20" },
//   "prev":  { "href": "/api/products?page=1&size=20" },
//   "self":  { "href": "/api/products?page=2&size=20" },
//   "next":  { "href": "/api/products?page=3&size=20" },
//   "last":  { "href": "/api/products?page=7&size=20" }
// }
🔗
HATEOAS pagination links, EK NEWSPAPER ke, "NEXT PAGE →" aur "← PREVIOUS PAGE" BUTTONS jaise hain — READER (CLIENT) ko, KHUD, NEXT PAGE ka NUMBER, CALCULATE NAHI karna PADТA, LINK, DIRECTLY, CLICKABLE hai.
1 / 2
⚡ Quick Recap
  • Spring HATEOAS = AUTOMATIC pagination links (first/prev/self/next/last)
  • Client, page numbers, MANUALLY calculate NAHI karta — links, DIRECTLY follow karta hai
  • Simple/internal APIs ke liye, OVERKILL — public, discoverable APIs ke liye USEFUL
On this page (2 subtopics)

PagedModel ke, ANDAR, INDIVIDUAL, ITEMS PAR bhi, CUSTOM, LINKS, ADD kiye ja sakte hain (jaise, HAR, PRODUCT PAR, "self" LINK) — PAGINATION LINKS (first/next/last), aur, RESOURCE-SPECIFIC, LINKS, DONO, EK, SAATH, COEXIST kar sakte hain.

EntityModel<ProductDto> productModel = EntityModel.of(dto,
    linkTo(methodOn(ProductController.class).getProduct(dto.getId())).withSelfRel());

SIMPLE, INTERNAL, ADMIN, DASHBOARDS ke liye, HATEOAS, PAGINATION LINKS, UNNECESSARY, COMPLEXITY hain — CLIENT (TYPICALLY, EK, FRONTEND, JISE, TUM, KHUD, CONTROL karte ho), page/size PARAMETERS, MANUALLY, EASILY, CALCULATE kar sakta hai.

💡Tip: HATEOAS, TAB, ZYAADA, VALUABLE hai, JAB, MULTIPLE, DIFFERENT, THIRD-PARTY, CLIENTS, TUMHARI, API, CONSUME karte hain, aur, TUM, NAHI, JAANТE, KI, UNKI, PAGINATION LOGIC, KAISI hai.