Ответ
Непосредственно после метода контроллера управление обычно передается на сервисный слой (Service Layer). Это место, где содержится основная бизнес-логика приложения.
Задачи сервисного слоя:
- Обработка и трансформация данных.
- Применение бизнес-правил и валидации.
- Координация вызовов к слою доступа к данным (репозиториям).
- Управление транзакциями (часто через
@Transactional).
Пример взаимодействия:
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public ResponseEntity<UserDto> createUser(@RequestBody @Valid UserDto userDto) {
// Контроллер делегирует логику сервису
UserDto createdUser = userService.createUser(userDto);
return ResponseEntity.ok(createdUser);
}
}
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
public UserDto createUser(UserDto userDto) {
// 1. Бизнес-логика и валидация
if (userRepository.existsByEmail(userDto.getEmail())) {
throw new EmailAlreadyExistsException();
}
// 2. Преобразование DTO -> Entity
User user = mapToEntity(userDto);
// 3. Сохранение через репозиторий (DAO слой)
user = userRepository.save(user);
// 4. Возврат результата
return mapToDto(user);
}
}
Далее сервис взаимодействует с репозиторием (Repository/DAO) для операций с базой данных.