На самом деле, одна из основных вещей в ООП - это IoC (инверсия управления). Нам необходимо соблюдать этот подход при создании профессионального приложения.
https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
Например,мы можем написать блоки try / catch в каждом классе проекта. Это плохая практика.вместо этого мы можем использовать аннотацию @ControllerAdvice.Просто определите конкретное исключение, JVM перехватит его во всех классах / запросах для вас. Это IoC.
Вы можете перехватывать исключения в каждом запросе в проекте, если вы определяете исключение в классе, который вы надеваетеаннотация @ControllerAdvice.
Простой пример использования:
@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public final ResponseEntity httpRequestMethodNotSupportedException(Exception ex, WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "there isn’t an URL like that",
request.getDescription(false));
return new ResponseEntity<>(exceptionResponse, HttpStatus.METHOD_NOT_ALLOWED);
}
Вот полезная ссылка о @ControllerAdvice:
https://medium.com/@jovannypcg/understanding-springs-controlleradvice-cd96a364033f