$ Spring MVC & REST API — Complete Interview Revision
// 5-7 Yrs Experience — MVC Internals, REST Design, Validation, Exception Handling & API Best Practices
1. What Is Spring MVC? Why Spring MVC?
Spring MVC (Model View Controller) is a web framework of Spring used to build web applications and REST APIs.
Without Spring MVC
Servlets → Manual Request Handling
Manual URL Mapping
Manual Response Generation → More Boilerplate
With Spring MVC
Request → Controller
Business Logic
Response → Less Boilerplate
MVC Architecture
Model
Application data & business logic — User, Order, Product, Employee, DTO, Entity
View
Responsible for displaying data — JSP, Thymeleaf, HTML, JSON, XML
Controller
Handles incoming requests, calls Service layer, returns View or JSON response
2. DispatcherServlet — Internal Request Flow
DispatcherServlet = Front Controller of Spring MVC. Receives every HTTP request and routes it to the appropriate controller. Why DispatcherServlet: Central Request Handling, URL Routing, Validation, Exception Handling, View Resolution, Content Negotiation.
DispatcherServlet Request Flow
HTTP Request → DispatcherServlet
HandlerMapping (finds controller) → HandlerAdapter (invokes controller)
Controller → Service → Repository → Database
Repository → Service → Controller
ViewResolver / HttpMessageConverter → HTTP Response
Spring MVC Components
DispatcherServletFront Controller
HandlerMappingMaps incoming URL to correct controller method — e.g. GET /users → UserController.getUsers()
HandlerAdapterInvokes matched controller method, handles parameters/return values/annotations
ControllerHandles request
ViewResolverResolves logical view name into actual view — "home" → /WEB-INF/views/home.jsp (traditional MVC)
HttpMessageConverterConverts object to/from JSON/XML
Spring MVC Lifecycle
Application Starts → DispatcherServlet Created
Controller Beans Loaded
↓ Request Arrives
DispatcherServlet → HandlerMapping → HandlerAdapter → Controller
Business Logic
ViewResolver Or HttpMessageConverter → Response
3. @Controller vs @RestController
@Controller
ReturnsView (JSP/Thymeleaf) — uses ViewResolver
Typical UseTraditional web applications (server-side views)
@RestController
Combines@Controller + @ResponseBody
ReturnsJSON/XML directly, without ViewResolver — uses HttpMessageConverter
Typical UseREST APIs, Microservices
4. REST API Fundamentals
REST (Representational State Transfer) is an architectural style for building web services using the HTTP protocol.
REST API Flow
Client → HTTP Request → DispatcherServlet
Controller → Service → Repository → Database
Repository → Service → Controller → HttpMessageConverter
JSON Response → Client
5. HTTP Mapping Annotations
AnnotationHTTP MethodUsed ForExample
@RequestMappingAny (path, method, consumes, produces)Map requests to controller/method/reports
@GetMappingGETRetrieve DataGET /users → return users
@PostMappingPOSTCreate ResourcePOST /users → create user
@PutMappingPUTComplete Resource UpdatePUT /users/10 → replace user
@PatchMappingPATCHPartial Resource UpdatePATCH /users/10 → update email only
@DeleteMappingDELETEDelete ResourceDELETE /users/10 → delete user
@RequestMapping can define Path, HTTP Method, Consumes, Produces. @GetMapping etc. are shortcuts for @RequestMapping(method=...).
6. Request Data Extraction
@PathVariableReads value from URL Path — /users/{id} → id=10. Used for resource identifiers.
@RequestParamReads query parameter — /users?page=1 → page=1. Used for pagination, filtering, searching, sorting.
@RequestHeaderReads an HTTP header — Authorization, Content-Type, Accept, X-Correlation-Id
@RequestBodyConverts JSON request into a Java Object (via Jackson)
@ModelAttributeForm data / query parameters → Object
Request Data Sources
SourceAnnotation
URL Path@PathVariable
Query Parameter@RequestParam
Request Body@RequestBody
HTTP Header@RequestHeader
@RequestBody Flow
Client Sends JSON → DispatcherServlet
HttpMessageConverter → Jackson
Java Object → Controller
7. ResponseEntity & @ResponseStatus
ResponseEntity
Purpose: customize the HTTP Response. Can control Status Code, Headers, and Response Body. Benefits: Flexible Response, Better API Design, Explicit Status Handling.
ResponseEntity Flow
Controller → Create ResponseEntity
Status + Headers + Body
HttpMessageConverter → JSON Response
@ResponseStatus → returns a fixed HTTP status without needing a ResponseEntity (common uses: 404, 201, 204, 400).
8. Jackson & HttpMessageConverter
Jackson
JSON library used by Spring Boot for Serialization and Deserialization. Serialization: Java Object → Jackson → JSON Deserialization: JSON → Jackson → Java Object
HttpMessageConverter
Converts HTTP request/response between Java Objects and different formats — JSON, XML, Text, Binary.
9. Full Request-Response Lifecycle
HTTP Request → DispatcherServlet → Controller
@RequestBody → DTO → Service
Repository → Database → Entity
DTO → ResponseEntity
Jackson → JSON Response
10. Validation
Validation ensures incoming data is correct, complete and follows business rules before processing. Without: Invalid Data → Database Errors → Application Failures. With: Validate Request → Accept Valid Data / Reject Invalid Data → Return Proper Error.
Validation Flow
Client Sends Request → @RequestBody
@Valid / @Validated → Bean Validation
↓ Passed
Controller → Service → Response
↓ Failed
Validation Exception → Global Exception Handler → 400 Bad Request
Common Bean Validation Annotations
@NotNullValue must not be null
@NotEmptyCollection/String must not be empty
@NotBlankString cannot be blank
@SizeMinimum / Maximum length
@Min / @MaxMinimum / Maximum value
@Positive / @NegativeGreater than / Less than zero
@EmailValid email format
@PatternRegular expression match
@Past / @FuturePast date / Future date
@Valid vs @Validated & Validation Groups
@Valid
Standard (JSR/Jakarta) Validation, Nested Validation, mostly used on @RequestBody DTOs
@Validated
Spring-specific, supports Validation Groups, Method Parameter Validation, Class Level Validation — more flexible
Validation Groups apply different rules for different operations — e.g. Create User → Password Required, Update User → Password Optional. BindingResult captures validation errors without throwing an exception — the controller can check it and return a custom response.
Common Validation Exceptions
MethodArgumentNotValidException@RequestBody validation failed
ConstraintViolationException@PathVariable / @RequestParam method validation failed
BindExceptionForm/Object binding failed
HttpMessageNotReadableExceptionInvalid JSON or malformed request
11. Exception Handling & ProblemDetail
Global Exception Handling handles exceptions in one place instead of every controller. Benefits: Clean Controllers, Consistent Error Response, Reusable Logic, Easy Maintenance.
@ControllerAdvice vs @RestControllerAdvice
@ControllerAdvice
Global handler for Spring MVC — can return View or Response
@RestControllerAdvice
@ControllerAdvice + @ResponseBody → returns JSON error response — preferred for REST APIs
Error Handling Flow
Client Request → Controller → Service
Exception Thrown
@RestControllerAdvice → @ExceptionHandler
Error Response → Client
@ExceptionHandler handles a specific exception (UserNotFoundException → 404, ValidationException → 400, BusinessException → 422).
ProblemDetail (Spring Boot 3 / RFC 9457) & Standard Error Response
ProblemDetail
Standard error response introduced in Spring Boot 3, based on RFC 9457. Provides: Status, Title, Detail, Instance, Type.
Standard Error Response Fields
timestamp → Error Time, status → HTTP Status, error → Reason, message → Description, path → Request URI.
Exception → HTTP Status Mapping
ExceptionHTTP Status
Validation Exception400
Entity Not Found404
Duplicate Record409
Business Rule Failure422
Unexpected Exception500
12. REST Principles & Constraints
1. Client-ServerSeparate UI and Backend
2. StatelessNo session stored on server
3. CacheableImprove performance
4. Uniform InterfaceConsistent API design
5. Layered SystemClient doesn't know backend architecture
6. Code On Demand (Optional)Server can send code (JavaScript)
Stateless
Resource Based
Uses HTTP
Cacheable
Client-Server
Uniform Interface
Platform Independent
13. URI & Resource Design Best Practices
Good — Use Nouns
/users, /users/101, /orders, /orders/500/items
Avoid — Verbs In URI
/getUsers, /createUser, /deleteUser, /updateUser, /saveUser, /deleteOrder
14. Safe & Idempotent Methods, PUT vs PATCH
Safe HTTP Methods
Do not modify data: GET, HEAD, OPTIONS
Idempotent Methods
Calling multiple times produces the same result: GET, PUT, DELETE, HEAD, OPTIONS Not Idempotent: POST
PUT vs PATCH
PUT
Replace entire resource — Idempotent
PATCH
Update selected fields — usually idempotent, based on implementation
15. HTTP Status Codes
CodeMeaningWhen To Use
200OKGET Success
201CreatedPOST Success
202AcceptedAsync processing accepted
204No ContentDELETE Success
400Bad RequestValidation Error
401UnauthorizedAuthentication failed
403ForbiddenNot authorized
404Not FoundUser Not Found
405Method Not AllowedWrong HTTP method used
409ConflictDuplicate Record
415Unsupported Media TypeWrong Content-Type
422Unprocessable EntityBusiness validation failed
500Internal Server ErrorUnexpected server error
503Service UnavailableService down / overloaded
16. Content Negotiation — Produces & Consumes
Content Negotiation
Client chooses the desired request and response format. Accept Header → Expected Response Format Content-Type Header → Request Format
Content Negotiation Flow
Client → Accept: application/json
Spring → Jackson
JSON Response
produces → specifies response format (JSON, XML, Text). consumes → specifies accepted request format (application/json, application/xml).
17. API Versioning
Purpose: support multiple API versions without breaking clients.
URI Versioning ⭐ (Recommended)/api/v1/users, /api/v2/users
Header VersioningAPI-Version: 1
Media Type Versioningapplication/vnd.company.v1+json
Query Parameter (Not Preferred)/users?version=1
18. CORS — Cross-Origin Resource Sharing
When Is CORS Needed?
Frontend localhost:3000
Backend localhost:8080 → Different Origin
Browser Blocks → Enable CORS
CORS Headers
Access-Control-Allow-Origin → Allowed Domain Access-Control-Allow-Methods → GET, POST, PUT, DELETE Access-Control-Allow-Headers → Authorization, Content-Type
19. Idempotency
Definition: repeating the same request produces the same result. Examples: GET /users/10 → same result. DELETE /users/10 → resource deleted; already deleted → still same state.
20. Pagination, Filtering, Sorting & Searching
Pagination/users?page=0&size=20 — return limited data instead of the entire dataset
Filtering/users?status=ACTIVE, /users?role=ADMIN
Sorting/users?sortBy=name, /users?sort=createdDate,desc
Searching/users?keyword=John, /products?name=Laptop
21. HATEOAS (Basics)
Hypermedia As The Engine Of Application State — the response contains links to related resources. Example — User response includes: Self Link → Orders Link → Update Link.
22. REST API & Production Checklist
REST API Checklist
Proper URI, Proper HTTP Method, Proper Status Code
Validation, Exception Handling
Pagination, Filtering, Sorting
Versioning, Security, Logging, Documentation
Production API Checklist
RESTful URI Design, DTO Based Request/Response
Input Validation, Global Exception Handling
Pagination For Large Data, Filtering & Sorting
API Versioning, Secure APIs (JWT/OAuth2)
Correlation ID, Logging & Monitoring
Swagger/OpenAPI, Rate Limiting
Idempotency For Critical Operations, Consistent Error Response
23. Real Project Scenarios
CertifyHub GET /api/usersDispatcherServlet → UserController → UserService → UserRepository → PostgreSQL → JSON Response
Traditional ERP /homeHomeController → home.jsp
Microservice POST /paymentsPaymentController → PaymentService → JSON Response
GET /api/v1/users?page=0&size=20Pagination via @RequestParam
GET /api/v1/users?status=ACTIVEFiltering
GET /api/v1/users?sort=username,ascSorting
POST /api/v1/users201 Created
DELETE /api/v1/users/101204 No Content
React (localhost:5173) → Spring Boot (localhost:8080)Enable CORS
New Mobile AppAPI v2 while old clients continue using API v1
Duplicate EmailBusinessException → 409 Conflict
Invalid JSONHttpMessageNotReadableException → 400 Bad Request
Authorization Header@RequestHeader → JWT Token
CertifyHubGlobalExceptionHandler → Consistent JSON Error Response
24. Top Interview Differences
@Controller vs @RestController
@RequestMapping vs @GetMapping
@PathVariable vs @RequestParam
PUT vs PATCH
@Valid vs @Validated
@ControllerAdvice vs @RestControllerAdvice
MethodArgumentNotValidException vs ConstraintViolationException
Safe Methods vs Idempotent Methods
Serialization vs Deserialization
@ResponseStatus vs ResponseEntity
URI Versioning vs Header Versioning vs Media Type Versioning
Produces vs Consumes
25. Interview One-Liner Revision
Spring MVC → Web Framework
MVC → Model View Controller
DispatcherServlet → Front Controller
HandlerMapping → Find Controller
HandlerAdapter → Execute Controller
@RestController → REST Controller
@RequestMapping → URL Mapping
ViewResolver → Resolve View
HttpMessageConverter → Object ↔ JSON/XML
REST → HTTP Based Architecture
@GetMapping → Read Resource
@PostMapping → Create Resource
@PutMapping → Complete Update
@PatchMapping → Partial Update
@DeleteMapping → Delete Resource
@PathVariable → URL Variable
@RequestParam → Query Parameter
@RequestHeader → HTTP Header
@RequestBody → JSON To Object
ResponseEntity → Full HTTP Response
@ResponseStatus → Fixed Status Code
Jackson → JSON Processor
Serialization → Object → JSON
Deserialization → JSON → Object
Validation → Input Verification
Bean Validation → Jakarta Validation API
@Valid → Validate Object
@Validated → Advanced Validation
BindingResult → Validation Errors
@ControllerAdvice → Global MVC Handler
@RestControllerAdvice → Global REST Handler
@ExceptionHandler → Handle Specific Exception
ProblemDetail → Standard Error Model
Safe Method → No Data Modification
Idempotent → Same Result Every Time
Content Negotiation → Response Format Selection
Produces → Response Type
Consumes → Request Type
API Versioning → Multiple API Versions
CORS → Cross-Origin Access
Pagination → Limited Records
Filtering → Restrict Data
Sorting → Ordered Data
HATEOAS → Hypermedia Links
26. 15-Minute Spring MVC & REST Revision Flow
MVC → DispatcherServlet → HandlerMapping → Controller
@RestController → @RequestMapping → @GetMapping → @PostMapping
@PathVariable → @RequestBody → ResponseEntity → Jackson
Validation → @ControllerAdvice → REST Principles → HTTP Methods
Status Codes → Content Negotiation → API Versioning
CORS → Idempotency → REST Best Practices
Enterprise Best Practices
Keep Controllers Thin
Use DTOs Instead Of Entities
Follow REST Naming Conventions
Use Meaningful HTTP Status Codes
Validate Every Request
Handle Exceptions Globally
Return Consistent Response Structure
Use Pagination For Large Data Sets
Version Public APIs
Enable CORS Only For Trusted Origins
Make Critical APIs Idempotent
Document APIs Using Swagger/OpenAPI
Secure APIs With JWT Or OAuth2
Add Correlation IDs For Request Tracing
Monitor APIs Using Actuator & Micrometer
Interviewers Expect You To Explain
✓ Full request lifecycle through DispatcherServlet, HandlerMapping, HandlerAdapter ✓ Why REST is stateless and how that affects scaling ✓ Validation strategy — @Valid vs @Validated, and global exception handling design ✓ Correct HTTP status code for every scenario ✓ API versioning & CORS decisions made in real projects ✓ Trade-offs: PUT vs PATCH, URI vs Header versioning, ProblemDetail vs custom error DTO