Poseemos la mejor respuesta que encontramos en internet. Nosotros esperamos que te sirva de ayuda y si deseas comentarnos algo que nos pueda ayudar a mejorar puedes hacerlo..
Solución:
Consulte la sección de consejos Después de lanzar de https://docs.spring.io/spring/docs/4.1.0.RELEASE/spring-framework-reference/htmlsingle/#aop-introduction-defn
Después de lanzar un consejo, se ejecuta cuando la ejecución de un método coincidente finaliza lanzando una excepción. Se declara usando la anotación @AfterThrowing:
Ejemplos
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterThrowing;
@Aspect
public class AfterThrowingExample
@AfterThrowing("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
public void doRecoveryActions()
// ...
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterThrowing;
@Aspect
public class AfterThrowingExample
@AfterThrowing(
pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
throwing="ex")
public void doRecoveryActions(DataAccessException ex)
// ...
Me encontré con el mismo escenario en el que tenía que devolver una respuesta de error DTO en caso de que se manejara una excepción. Dentro de la clase @Aspect,
@Aspect
@Component
public class MyAspect
Definió otra clase para el manejo de excepciones como a continuación:
@ControllerAdvice
public class ExceptionLogAdvice
@ExceptionHandler(InternalServerException.class)
@ResponseStatus(HttpStatus.BAD_GATEWAY)
@ResponseBody
public ResponseEntity
Ajusté un poco el código porque no puedo compartir el código real. Espero haber dejado claro el concepto.
Teniendo en cuenta que com.sc.bs.impl.* es un paquete de capa de negocio/dominio y lo interceptó en la capa AOP usando la anotación @Around. Fragmento de código:
@Around("execution(* com.sc.bs.impl..*.*(..))")
public Object exceptionHandlerWithReturnType(ProceedingJoinPoint joinPoint) throws Throwable
try
obj = joinPoint.proceed();
catch(Exception ex)
throw ex;
Aquí puedes ver las reseñas y valoraciones de los usuarios
Recuerda algo, que te brindamos la opción de parafrasear tu experiencia si encontraste tu traba a tiempo.