Встречается на собеседованиях • сегодня
Как хендлить ошибки пользователя и отправлять ему необходимый результат вместо ошибки в Spring
В Spring ошибки пользователя можно хэндлить через `@ControllerAdvice` и `@ExceptionHandler`.
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity handleValidationException(MethodArgumentNotValidException ex) {
List errors = ex.getBindingResult()
.getFieldErrors()
.stream()
.map(FieldError::getDefaultMessage)
.collect(Collectors.toList());
ErrorResponse response = new ErrorResponse("Validation failed", errors);
return ResponseEntity.badRequest().body(response);
}
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity handleUserNotFound(UserNotFoundException ex) {
ErrorResponse response = new ErrorResponse(ex.getMessage());
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response);
}
}
```
**Ключевые моменты:**
- `@ControllerAdvice` перехватывает исключения во всех контроллерах.
- `@ExceptionHandler` указывает, какой метод обрабатывает конкретное исключение.
- Можно возвращать кастомный `ErrorResponse` с нужным HTTP-статусом.
- Для валидации DTO удобно использовать `@Valid` и перехватывать `MethodArgumentNotValidException`.
Пример `ErrorResponse`:
```java
public record ErrorResponse(String message, List details) {}
```

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