В Spring MVC, на какой слой передается запрос после контроллера?

«В Spring MVC, на какой слой передается запрос после контроллера?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Непосредственно после метода контроллера управление обычно передается на сервисный слой (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) для операций с базой данных.