Встречается на собеседованиях • сегодня
Как организовать работу с ошибками в проекте с несколькими REST-контроллерами, каждый из которых реализует CRUD-операции для разных сущностей
Для централизованной обработки ошибок в Spring Boot приложении используйте `@ControllerAdvice` + `@ExceptionHandler`.
Пример:
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity handleEntityNotFound(EntityNotFoundException ex) {
ErrorResponse error = new ErrorResponse(
"NOT_FOUND",
ex.getMessage(),
LocalDateTime.now()
);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity handleValidation(MethodArgumentNotValidException ex) {
List errors = ex.getBindingResult()
.getFieldErrors()
.stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.toList();
ErrorResponse error = new ErrorResponse(
"VALIDATION_FAILED",
errors.toString(),
LocalDateTime.now()
);
return ResponseEntity.badRequest().body(error);
}
}
```
**Ключевые моменты:**
1. Создайте кастомные исключения (например, `EntityNotFoundException`).
2. Используйте `@ControllerAdvice` для глобального перехвата исключений.
3. Возвращайте структурированный JSON с кодом ошибки, сообщением и временем.
4. Обрабатывайте специфичные исключения (валидация, `DataIntegrityViolationException` и т.д.).
Пример `ErrorResponse`:
```java
@Data
@AllArgsConstructor
class ErrorResponse {
private String code;
private String message;
private LocalDateTime timestamp;
}
```

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы