Example 2: With Custom ApiResponse (Industry Standard)
@RestController@RequestMapping("/api/products")publicclassProductController{@GetMapping("/{id}")publicResponseEntity<ApiResponse<Product>>getProduct(@PathVariableLongid){Productproduct=productService.findById(id);returnResponseEntity.ok(ApiResponse.success(product));}}// Response from API:{"success":true,"data":{"id":1,"name":"Laptop","price":50000},"timestamp":1709388000000}// Benefits:// ✅ Success clearly indicated// ✅ Consistent format across all APIs// ✅ Easy to add metadata// ✅ Frontend parsing easier
Spring Boot Kya Provide Karta Hai?
Spring Boot Inbuilt Classes:
// 1. ResponseEntity (Inbuilt)importorg.springframework.http.ResponseEntity;ResponseEntity<Product>response=ResponseEntity.ok(product);ResponseEntity.status(HttpStatus.CREATED).body(product);ResponseEntity.notFound().build();// 2. HttpStatus (Inbuilt)importorg.springframework.http.HttpStatus;HttpStatus.OK// 200HttpStatus.CREATED// 201HttpStatus.NOT_FOUND// 404// 3. Page (Spring Data - for pagination)importorg.springframework.data.domain.Page;Page<Product>products=productRepository.findAll(pageable);// But ye repository level hai, response wrapper nahi// 4. EntityModel (HATEOAS - advanced)importorg.springframework.hateoas.EntityModel;EntityModel<Product>resource=EntityModel.of(product);// But bohot complex hai, rarely use hota
// With ApiResponse - Consistent@GetMapping("/products")publicResponseEntity<ApiResponse<List<Product>>>getAll(){returnResponseEntity.ok(ApiResponse.success(products));}// Returns: {"success": true, "data": [...]}@PostMapping("/products")publicResponseEntity<ApiResponse<Product>>create(){returnResponseEntity.ok(ApiResponse.success(product));}// Returns: {"success": true, "data": {...}}// ✅ Always same format
Reason 2: Error Handling
// GlobalExceptionHandler@RestControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(ResourceNotFoundException.class)publicResponseEntity<ApiResponse<Void>>handleNotFound(ResourceNotFoundExceptionex){returnResponseEntity.status(HttpStatus.NOT_FOUND).body(ApiResponse.error(ex.getMessage()));}}// Error Response (consistent):{"success":false,"message":"Product not found","timestamp":1709388000000}
Companies Kis Tarah Se Use Karte Hain
Startup/Small Company:
// Simple approach - direct ResponseEntity@GetMappingpublicResponseEntity<List<Product>>getProducts(){returnResponseEntity.ok(productService.findAll());}
Medium/Large Company:
// Standard ApiResponse wrapper@GetMappingpublicResponseEntity<ApiResponse<List<ProductResponse>>>getProducts(){List<Product>products=productService.findAll();List<ProductResponse>responses=productMapper.toResponseList(products);returnResponseEntity.ok(ApiResponse.success(responses));}
Enterprise (Amazon, Flipkart level):
// Custom complex wrapper with metadata@GetMappingpublicResponseEntity<StandardResponse<PagedResult<ProductDTO>>>getProducts(Pageablepageable){PagedResult<ProductDTO>result=productService.getProducts(pageable);returnResponseEntity.ok(StandardResponse.<PagedResult<ProductDTO>>builder().status("SUCCESS").code(200).data(result).metadata(Metadata.builder().timestamp(Instant.now()).requestId(UUID.randomUUID().toString()).version("v1").build()).build());}// Response:{"status":"SUCCESS","code":200,"data":{"content":[...],"page":0,"totalPages":10},"metadata":{"timestamp":"2024-02-02T10:30:00Z","requestId":"abc-123-xyz","version":"v1"}}
Final Answer - Ek Baar Mein:
❌ ApiResponse Spring Boot mein INBUILT NAHI hai
✅ Ye aapko KHUD banana padta hai
✅ 90% companies yeh approach follow karti hain
✅ Consistency aur better error handling ke liye
✅ Folder structure mein isliye nahi dikha kyunki
aapne abhi tak banaya nahi
✅ Ye ek STANDARD PRACTICE hai, requirement nahi
Quick Action - Abhi Kya Karo?
# 1. Create file
src/main/java/com/yourcompany/dto/response/ApiResponse.java
# 2. Copy-paste the code I gave# 3. Start using in controllers# 4. Add GlobalExceptionHandler for errors
That's it! Ab samajh aa gaya? 🚀
Top comments (0)
Subscribe
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Top comments (0)