Sobes.tech
Junior — Middle

Farklı varlıklar için CRUD işlemleri sağlayan birkaç REST denetleyicisi içeren bir projede istisna işleme nasıl en iyi şekilde yapılandırılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

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