Если вы прочитаете документы для @ExceptionHandler
, вы увидите, что он используется для маркировки метода для обработки исключений. Следовательно, вы должны указать, какие исключения могут обрабатываться (например, @ExceptionHandler(MyException.class)
или @ExceptionHandler({MyException.class, MyOtherException.class})
). Когда такое исключение происходит в вашем контроллере, этот метод вызывается.
@ControllerAdvice
делает методы, определенные в классе, доступными для всех ваших контроллеров.
Я не знаю, что вы хотите сделать, но поскольку вы расширяете ResponseEntityExceptionHandler
в классе @ControllerAdvice
, вы можете просто удалить @ExceptionHandler annotation
:
@GetMapping(...)
public ResponseEntity<List<User>> testErrors(...) {
...
}
Если вы хотите обрабатывать определенные исключения самостоятельно, вы можете сделать это следующим образом:
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(MyException.class)
public ResponseEntity<?> handleMyException() {
...
}
}
@Controller
public class MyController {
@GetMapping(...)
public ResponseEntity<List<User>> testErrors(...) {
throw new MyException();
}
}
Теперь handleException()
будет вызываться при возникновении ошибки в testErrors()
.
Если вы хотите обрабатывать исключения только в одном контроллере, вы можете сделать это:
@Controller
public class MyController {
@GetMapping(...)
public ResponseEntity<List<User>> testErrors(...) {
throw new MyException();
}
@ExceptionHandler(MyException.class)
public ResponseEntity<?> handleMyException() {
...
}
}