Junior — Middle
Qual è il modo migliore per strutturare la gestione delle eccezioni in un progetto che contiene più controller REST, ognuno dei quali fornisce operazioni CRUD per entità diverse?
sobes.tech AI
Risposta dell'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-ответы.