Sobes.tech
Назад к вопросам
Junior — Middle
68

Каким образом лучше всего структурировать обработку исключений в проекте, содержащем несколько REST-контроллеров, каждый из которых обеспечивает операции CRUD для различных сущностей?

Ответ от нейросети

sobes.tech AI

Лучший способ структурировать обработку исключений в проекте с несколькими 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-ответы.