Sobes.tech
Junior — Middle

Quelle est la meilleure façon de structurer la gestion des exceptions dans un projet contenant plusieurs contrôleurs REST, chacun assurant des opérations CRUD pour différentes entités?

sobes.tech IA

Réponse de l'IA

Лучший способ структурировать обработку исключений в проекте с несколькими REST-контроллерами — использовать централизованный обработчик исключений. В Spring Boot, например, для этого применяют аннотацию @ControllerAdvice, которая позволяет создать класс, обрабатывающий исключения, выбрасываемые из любых контроллеров.

Преимущества такого подхода:

  • Единое место для обработки ошибок и формирования ответов клиенту.
  • Упрощение кода контроллеров — им не нужно обрабатывать исключения локально.
  • Легко поддерживать и расширять обработку ошибок.

Пример:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(EntityNotFoundException.class)
    public ResponseEntity<String> handleNotFound(EntityNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneric(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Внутренняя ошибка сервера");
    }
}

Таким образом, все контроллеры могут выбрасывать исключения, а @ControllerAdvice будет их перехватывать и формировать корректные HTTP-ответы.