Ответ
@ExceptionHandler — это аннотация Spring MVC, которая помечает метод как обработчик исключений для конкретного контроллера. Она позволяет централизованно обрабатывать исключения, выброшенные в методах этого контроллера, и возвращать кастомный HTTP-ответ.
Пример использования:
@RestController
public class UserController {
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
}
@ExceptionHandler(UserNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ErrorResponse handleUserNotFound(UserNotFoundException ex) {
return new ErrorResponse("User not found", ex.getMessage());
}
}
Ключевые особенности:
- Обрабатывает исключения только в пределах контроллера, где объявлен.
- Может принимать само исключение и другие параметры запроса (например,
HttpServletRequest) в качестве аргументов метода. - Возвращаемое значение метода формирует тело HTTP-ответа (аналогично
@RequestMapping). - Для глобальной обработки исключений во всем приложении используется
@ControllerAdviceв сочетании с@ExceptionHandler.