β¬ οΈ Back to Controller Index
Integration with Other Layers
The Integration responsibility describes how the Controller Layer connects to downstream layers in the application.
Layered Architecture Integration
Controller Layer (You are here)
β
Service Layer (Business Logic)
β
Repository Layer (Data Access)
β
Database
Interaction Pattern
1. Controller Receives Request
@PostMapping
public ResponseEntity<SupplierDTO> create(@Valid @RequestBody CreateSupplierDTO dto) {
// Request received, DTO validated2. Controller Delegates to Service
The controller calls service methods but never implements business logic:
// NO business logic here
SupplierDTO created = supplierService.create(dto); // Delegate3. Service Performs Validation
The service layer validates business rules:
// In SupplierService
@Transactional
public SupplierDTO create(CreateSupplierDTO dto) {
// Business validation
supplierValidator.validateRequiredFields(dto);
supplierValidator.validateUniquenessOnCreate(dto.getName());
// Convert DTO β Entity
Supplier entity = mapper.toEntity(dto);4. Service Calls Repository
The service persists data via repository methods:
// Persist to database
Supplier saved = repository.save(entity);
// Return DTO to controller
return mapper.toDTO(saved);
}5. Controller Builds HTTP Response
The controller receives the result and wraps it in a response:
// Build HTTP response
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(created.getId())
.toUri();
return ResponseEntity.created(location).body(created); // 201 CREATED
}Data Flow Diagram
Client (JSON)
β
Controller
ββ Receives HTTP request
ββ Validates with @Valid
ββ Checks authorization with @PreAuthorize
ββ Delegates to service
β
Service Layer
ββ Validates business rules
ββ Transforms DTO β Entity
ββ Calls repository
ββ Transforms Entity β DTO
β
Repository Layer
ββ Executes SQL/JPQL queries
ββ Returns entities
β
Database
ββ Persists/retrieves data
β
Entity is returned through layers
β
Controller (DTO)
ββ Returns HTTP response (JSON)
Responsibility Boundaries
Controller DOES: - β
Handle HTTP concerns
(routing, status codes) - β
Validate input with
@Valid - β
Check authorization with
@PreAuthorize - β
Convert DTO βοΈ JSON - β
Call
service methods
Controller DOES NOT: - β Implement business logic - β Access repositories directly - β Connect to databases - β Validate business rules - β Manage transactions
Service DOES: - β Implement business logic - β Validate business rules - β Manage transactions - β Call repositories - β Handle exceptions
Repository DOES: - β Execute database queries - β Manage entities - β Handle pagination/sorting - β Translate to domain exceptions