Haan Bilkul Sahi! Controller Mein Sirf 4 Tarah Ka Data Aata Hai π―
4 Input Sources - Yaad Rakho Bas Ye:
ββββββββββββββββββββββββββββββββββββββββββββββββββ
β Controller Mein Data Kahan Se Aata Hai? β
ββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1οΈβ£ URL PATH β @PathVariable β
β 2οΈβ£ QUERY STRING β @RequestParam β
β 3οΈβ£ REQUEST BODY β @RequestBody β
β 4οΈβ£ HEADERS β @RequestHeader β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββ
1οΈβ£ @PathVariable - URL Path Mein Data
Kab Use Kare:
- Resource identify karna ho (ID, username, slug)
- URL ka part ho data
Examples:
// Example 1: Single path variable
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
// URL: /users/123
// id = 123
return userService.findById(id);
}
// Example 2: Multiple path variables
@GetMapping("/users/{userId}/orders/{orderId}")
public Order getUserOrder(
@PathVariable Long userId,
@PathVariable Long orderId
) {
// URL: /users/5/orders/100
// userId = 5, orderId = 100
return orderService.findByUserAndOrder(userId, orderId);
}
// Example 3: String path variable
@GetMapping("/products/{category}")
public List<Product> getByCategory(@PathVariable String category) {
// URL: /products/electronics
// category = "electronics"
return productService.findByCategory(category);
}
Real URLs:
/users/123 β userId = 123
/posts/my-first-blog β slug = "my-first-blog"
/categories/electronics β category = "electronics"
2οΈβ£ @RequestParam - Query String Mein Data
Kab Use Kare:
- Filtering, sorting, pagination
- Optional parameters
- Search criteria
Examples:
// Example 1: Single parameter
@GetMapping("/products")
public List<Product> search(@RequestParam String name) {
// URL: /products?name=laptop
// name = "laptop"
return productService.searchByName(name);
}
// Example 2: Multiple parameters
@GetMapping("/products")
public List<Product> filter(
@RequestParam String category,
@RequestParam Double minPrice,
@RequestParam Double maxPrice
) {
// URL: /products?category=electronics&minPrice=1000&maxPrice=5000
// category = "electronics"
// minPrice = 1000.0
// maxPrice = 5000.0
return productService.filter(category, minPrice, maxPrice);
}
// Example 3: Optional parameter with default value
@GetMapping("/products")
public List<Product> getProducts(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(required = false) String sortBy
) {
// URL: /products
// page = 0, size = 10, sortBy = null
// URL: /products?page=2&size=20&sortBy=price
// page = 2, size = 20, sortBy = "price"
return productService.getAll(page, size, sortBy);
}
// Example 4: Boolean parameter
@GetMapping("/users")
public List<User> getUsers(
@RequestParam(required = false, defaultValue = "false") boolean active
) {
// URL: /users
// active = false
// URL: /users?active=true
// active = true
return userService.findByActive(active);
}
Real URLs:
/products?name=laptop
/products?category=electronics&minPrice=1000
/users?page=2&size=20&sortBy=name
/search?q=spring boot&limit=10
3οΈβ£ @RequestBody - JSON/XML Body Mein Data
Kab Use Kare:
- Create/Update operations (POST, PUT, PATCH)
- Complex data structures
- Multiple fields bhejne ho
Examples:
// Example 1: Create operation
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// Request Body (JSON):
// {
// "name": "Raj",
// "email": "raj@email.com",
// "age": 25
// }
return userService.save(user);
}
// Example 2: With validation
@PostMapping("/orders")
public Order createOrder(@Valid @RequestBody OrderRequest request) {
// Request Body:
// {
// "items": [
// {"productId": 1, "quantity": 2},
// {"productId": 3, "quantity": 1}
// ],
// "shippingAddress": "123 Street",
// "paymentMethod": "CARD"
// }
return orderService.create(request);
}
// Example 3: Update operation
@PutMapping("/products/{id}")
public Product updateProduct(
@PathVariable Long id,
@RequestBody ProductUpdateRequest request
) {
// URL: /products/10
// Request Body:
// {
// "name": "Updated Name",
// "price": 999.99,
// "stock": 50
// }
return productService.update(id, request);
}
// Example 4: List of objects
@PostMapping("/bulk-users")
public List<User> createBulkUsers(@RequestBody List<User> users) {
// Request Body:
// [
// {"name": "User1", "email": "user1@email.com"},
// {"name": "User2", "email": "user2@email.com"}
// ]
return userService.saveAll(users);
}
Request Body Example:
POST /api/users
Content-Type: application/json
{
"name": "Raj Kumar",
"email": "raj@example.com",
"phone": "9876543210",
"address": {
"street": "123 Main St",
"city": "Mumbai"
}
}
4οΈβ£ @RequestHeader - HTTP Headers Mein Data
Kab Use Kare:
- Authentication tokens
- API keys
- Request metadata
- User identification
Examples:
// Example 1: Authorization token
@GetMapping("/profile")
public User getProfile(@RequestHeader("Authorization") String token) {
// Header: Authorization: Bearer xyz123token
// token = "Bearer xyz123token"
return userService.getProfileByToken(token);
}
// Example 2: Custom headers
@PostMapping("/orders")
public Order createOrder(
@RequestHeader("X-User-Id") Long userId,
@RequestHeader("X-Request-Id") String requestId,
@RequestBody OrderRequest request
) {
// Headers:
// X-User-Id: 123
// X-Request-Id: abc-def-ghi
log.info("Request {} from user {}", requestId, userId);
return orderService.create(userId, request);
}
// Example 3: Optional header with default
@GetMapping("/data")
public String getData(
@RequestHeader(value = "Accept-Language", defaultValue = "en") String language
) {
// Header: Accept-Language: hi
// language = "hi"
// No header sent:
// language = "en"
return dataService.getByLanguage(language);
}
// Example 4: API Key validation
@GetMapping("/api/products")
public List<Product> getProducts(
@RequestHeader("X-API-Key") String apiKey
) {
// Header: X-API-Key: my-secret-key-123
if (!isValidApiKey(apiKey)) {
throw new UnauthorizedException("Invalid API key");
}
return productService.findAll();
}
Request Headers Example:
GET /api/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
X-User-Id: 123
Accept-Language: hi
Content-Type: application/json
π― Complete Example - Sabhi 4 Ek Saath:
@RestController
@RequestMapping("/api/orders")
public class OrderController {
@Autowired
private OrderService orderService;
/**
* Search orders with all 4 input types
*/
@GetMapping("/{orderId}")
public ResponseEntity<Order> getOrderDetails(
// 1οΈβ£ PATH VARIABLE - Order ID
@PathVariable Long orderId,
// 2οΈβ£ QUERY PARAM - Include items flag
@RequestParam(defaultValue = "false") boolean includeItems,
// 3οΈβ£ HEADER - User authentication
@RequestHeader("Authorization") String authToken,
// 4οΈβ£ HEADER - User ID
@RequestHeader("X-User-Id") Long userId
) {
// Validate token
validateToken(authToken);
// Fetch order
Order order = orderService.getOrderById(orderId, userId, includeItems);
return ResponseEntity.ok(order);
}
/**
* Create order - combining inputs
*/
@PostMapping
public ResponseEntity<Order> createOrder(
// 1οΈβ£ BODY - Order data (main data)
@Valid @RequestBody OrderRequest orderRequest,
// 2οΈβ£ HEADER - User ID
@RequestHeader("X-User-Id") Long userId,
// 3οΈβ£ QUERY PARAM - Apply coupon
@RequestParam(required = false) String couponCode
) {
Order order = orderService.create(userId, orderRequest, couponCode);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(order);
}
/**
* Update order status
*/
@PatchMapping("/{orderId}/status")
public ResponseEntity<Order> updateStatus(
// 1οΈβ£ PATH VARIABLE - Which order
@PathVariable Long orderId,
// 2οΈβ£ BODY - New status data
@RequestBody StatusUpdateRequest request,
// 3οΈβ£ HEADER - Admin token
@RequestHeader("Authorization") String adminToken,
// 4οΈβ£ QUERY PARAM - Send notification?
@RequestParam(defaultValue = "true") boolean notify
) {
validateAdminToken(adminToken);
Order updated = orderService.updateStatus(
orderId,
request.getStatus(),
notify
);
return ResponseEntity.ok(updated);
}
}
π Quick Decision Chart:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kis Situation Mein Kya Use Kare? β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Resource identify (ID) β @PathVariable β
β /users/123 β
β β
β Filters, pagination β @RequestParam β
β ?page=1&size=10&status=active β
β β
β Create/Update data β @RequestBody β
β { "name": "...", "age": 25 } β
β β
β Auth, API keys, metadata β @RequestHeader β
β Authorization: Bearer token β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Yaad Rakhne Ka Formula:
1. URL mein ID/resource? β @PathVariable
2. ? ke baad filters/options? β @RequestParam
3. JSON body mein complex data? β @RequestBody
4. Authorization/metadata? β @RequestHeader
Bas yeh 4 cheezein master karo, sab controller samajh aa jayega! π
Top comments (0)