es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo registrar excepciones del controlador REST utilizando Spring AOP?

Tengo un controlador REST y una clase Spring AOP que captura excepciones personalizadas a nivel de servicio y las registra, pero también necesito registrar las excepciones desde el lado del controlador.

Aquí está mi clase Spring AOP:

@Aspect
@Component
public class ExceptionLoggerAspect {

@AfterThrowing(pointcut = "execution(* com.b.m.service.GaService.*(..)) ", throwing = "ex")
public void logError(JoinPoint joinPoint, GaException ex) {
    Signature signature = joinPoint.getSignature();
    String methodName = signature.getName();
    String stuff = signature.toString();
    String arguments = Arrays.toString(joinPoint.getArgs());
    LOGGER.error("Se ha capturado una excepción en el método:\n "
            + "[" + methodName + "] con los argumentos "
            + arguments + " y el toString completo: [" + stuff + "] \n la excepción es: ["
            + ex.type.getMessage() + " - " + ex.type.getAdditionalInfo() + "]");
}

}

¿Cómo puedo agregar mi clase controladora aquí para registrar las excepciones?
Agregué la ruta del paquete de mi controlador con el punto de corte “execution”, pero no funciona.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar tu clase de controlador al punto de corte de la clase Spring AOP para registrar excepciones, debes usar el siguiente fragmento de código:

    @AfterThrowing(pointcut = "execution(* com.b.m.service.GaService.*(..)) || execution(* com.b.m.controller.*.*(..))", throwing = "ex")
    public void logError(JoinPoint joinPoint, GaException ex) {
        // código para registrar la excepción
    }
    

    Aquí, estás agregando otro punto de corte para tu clase de controlador usando el operador “||” para combinarlo con el punto de corte existente para GaService. El patrón “execution(* com.b.m.controller..(..))” coincidirá con cualquier método de cualquier clase en el paquete com.b.m.controller.

    Asegúrate de importar tu paquete de controladores en la clase Aspect y también asegúrate de especificar correctamente el nombre del paquete y los nombres de los métodos en el punto de corte. Esto permitirá el registro de excepciones tanto en las capas de servicio como en las de controlador.

Comments are closed.