Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save adityapatnaik/4bac438638cafc4d387701904344c4d9 to your computer and use it in GitHub Desktop.
Save adityapatnaik/4bac438638cafc4d387701904344c4d9 to your computer and use it in GitHub Desktop.
Custom Exception Handling Annotation that does try catch with input as a custom message and list of exception classes
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
spring.aop.auto=true
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class ExceptionHandlerAspect {
    @Around("@annotation(exceptionHandler)")
    public Object handleExceptions(ProceedingJoinPoint joinPoint, ExceptionHandler exceptionHandler) {
        try {
            return joinPoint.proceed();
        } catch (Throwable e) {
            for (Class<? extends Exception> exceptionClass : exceptionHandler.exceptions()) {
                if (exceptionClass.isAssignableFrom(e.getClass())) {
                    throw new DataTransferException(exceptionHandler.message(), e);
                }
            }
            throw new RuntimeException(e);
        }
    }
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExceptionHandler {
    String message() default "An error occurred";
    Class<? extends Exception>[] exceptions() default Exception.class;
}

Example

@ExceptionHandler(message = "Failed to delete data from destination table", exceptions = {SQLException.class})
    private void deleteDataFromDestinationTable() {
        String destinationTable = properties.getDestinationTable();
        jdbcTemplate.update("DELETE FROM " + destinationTable);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment