Kiến trúc 3 lớp
Client Request
↓
┌─────────────────┐
│ Controller │ ← Nhận request, validate input
│ (@RestController) │
└────────┬────────┘
↓
┌─────────────────┐
│ Service │ ← Business logic
│ (@Service) │
└────────┬────────┘
↓
┌─────────────────┐
│ Repository │ ← Data access
│ (@Repository) │
└─────────────────┘
Controller
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<UserDTO> getAllUsers() {
return userService.findAll();
}
@GetMapping("/{id}")
public UserDTO getUser(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public UserDTO createUser(@Valid @RequestBody CreateUserRequest request) {
return userService.create(request);
}
}
Request Lifecycle
HTTP Request → DispatcherServlet → HandlerMapping → Controller
→ Service → Repository → Database
→ Response Entity → JSON Serialization → HTTP Response
Key insight:
@RestController=@Controller+@ResponseBody. Mọi return value tự động serialize thành JSON.