Вы можете использовать глобальную обработку исключений, используя @ControllerAdvice
. Создайте свое собственное исключение и сгенерируйте это исключение из класса Aspect. Вы можете создать @ControllerAdvice
аннотированный класс следующим образом:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {UnauthorizedException.class})
public ResponseEntity<Object> handleException(UnauthorizedException ex){
return new ResponseEntity<Object>(
ex.getMessage(), new HttpHeaders(), HttpStatus.FORBIDDEN);
}
}
EDIT:
Ниже приведен код глобальной обработки исключений для весенней загрузки:
DemoController.java
@RestController
public class DemoController {
@GetMapping("/hello")
String hello(){
return "Message from controller if there is no exception";
}
}
AuthException .java
public class AuthException extends Exception{
AuthException(String msg){
super(msg);
}
}
AopValidator .java
@Aspect
@Component
public class AopValidator {
@Before("execution(String hello())")
public void test() throws AuthException{
throw new AuthException("Exception message from AOP on unauthorized access");
}
}
GlobalExceptionHandler.java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(AuthException.class)
ResponseEntity<Object> handleException(AuthException ex){
return new ResponseEntity<>(ex.getMessage(), new HttpHeaders(), HttpStatus.FORBIDDEN);
}
}