Вот способ сделать это с AspectJ .
Прежде всего, определите аннотацию уровня метода.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface IgnoreRuntimeException{
}
Затем определите около аспект для аннотации.
@Component
@Aspect
public class ExceptionHandlingAdvice {
@Around("@annotation(com.yourpackage.IgnoreRuntimeException) && execution(* *(..))")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
Object returnObject = null;
// do something before the invocation
try {
// invoke method
returnObject = joinPoint.proceed();
// do something with the returned object
return returnObject;
} catch (Exception e) {
// do something with the exception
}
}
}
Затем вы можете применить аннотацию поверх ваших методов, чтобы игнорировать исключения.
@IgnoreRuntimeException
public void addEntryIfPresent(String key, Dto dto) {
// ...
}
Вы также можете проверить параметрыаннотация с использованием API ProceedingJoinPoint
для игнорирования только тех исключений, которые вы хотели бы игнорировать.