🔍
Building REST Controllers

Path vs Query Parameters

@PathVariable vs @RequestParam
💡 Path variable, EK GHAR ka ADDRESS hai (ZAROORI, POORE URL ka HISSA) — jaise /users/42. Query parameter, EK ORDER ke SAATH, EXTRA INSTRUCTIONS hain (OPTIONAL, "?" ke BAAD) — jaise ?sort=name&page=2.

@PathVariable, URL PATH ka EK HISSA hai, JO, EK SPECIFIC RESOURCE ko, IDENTIFY karta hai — TYPICALLY, MANDATORY, aur RESOURCE HIERARCHY REPRESENT karta hai (jaise /products/42). @RequestParam, QUERY STRING SE, VALUES LETA hai — TYPICALLY, FILTERING, SORTING, PAGINATION ke liye, OPTIONAL PARAMETERS.

RULE OF THUMB — AGAR EK VALUE, RESOURCE ko, UNIQUELY, IDENTIFY karta hai, WOH, PATH VARIABLE HONA CHAHIYE. AGAR EK VALUE, RESULT ko, FILTER/MODIFY karta hai (LEKIN, RESOURCE ki IDENTITY, CHANGE NAHI karta), WOH, QUERY PARAMETER HONA CHAHIYE.

@GetMapping("/products/{id}")   // id = PATH variable, resource identity
public Product getProduct(@PathVariable Long id) { }

@GetMapping("/products")   // filtering/sorting = QUERY params, optional
public List<Product> searchProducts(
    @RequestParam(required = false) String category,
    @RequestParam(defaultValue = "0") int page,
    @RequestParam(defaultValue = "20") int size,
    @RequestParam(required = false) String sortBy
) { }
// GET /products?category=electronics&page=1&sortBy=price
🔍
Path variable, EK GHAR ka ADDRESS hai (ZAROORI, POORE URL ka HISSA) — jaise /users/42. Query parameter, EK ORDER ke SAATH, EXTRA INSTRUCTIONS hain (OPTIONAL, "?" ke BAAD) — jaise ?sort=name&page=2.
1 / 2
⚡ झट से Recap
  • @PathVariable = mandatory, resource identity (jaise /products/{id})
  • @RequestParam = optional, filtering/sorting/pagination
  • required=false + defaultValue = optional query params, sensible defaults
इस page में (2 subtopics)

@PathVariable Long id, AUTOMATICALLY, URL STRING (jaise "42") ko, Long TYPE mein, CONVERT karta hai — AGAR, CONVERSION, FAIL hoती hai (jaise, "/products/abc"), Spring, AUTOMATICALLY, 400 Bad Request, RETURN kar deta hai.

💡Tip: CUSTOM TYPES (jaise, ENUMS) ke liye bhi, @PathVariable, AUTOMATIC CONVERSION SUPPORT karta hai, AGAR, TYPE, Spring's, CONVERSION SERVICE ke, SAATH, COMPATIBLE hai.

@RequestParam(required = false, defaultValue = "10") int limit — DONO, TOGETHER, EK COMMON, PATTERN hain — IF, CLIENT, PARAMETER, PROVIDE NAHI karta, defaultValue, USE hoती hai. required aur defaultValue, DONO, SAATH mein, TECHNICALLY, REDUNDANT hain (defaultValue hone SE, required, AUTOMATICALLY, false ho jaata hai), LEKIN, CLARITY ke liye, DONO, LIKHE JAATE hain.

@RequestParam(defaultValue = "10") int limit
// Agar client, ?limit=5 bheje, limit = 5
// Agar client, limit param, SKIP kare, limit = 10 (DEFAULT)