Java 查找从中生成异常的类。不使用stacktrace,并以AOP方式使用@ControllerAdvice

Java 查找从中生成异常的类。不使用stacktrace,并以AOP方式使用@ControllerAdvice,java,spring-mvc,spring-aop,Java,Spring Mvc,Spring Aop,我正在我的应用程序中集中异常处理。但是我希望消息被国际化,并且应该保存在属性文件中。为此,我计划保留带有控制器的完全限定名并附加.message的密钥。因此,我的@ControllerAdvice标记类将处理异常,并根据“exception.ControllerName的完全限定名”从属性文件中获取消息,问题是我没有从异常发生的位置获取控制器名称和方法签名。有什么方法可以做到这一点吗?但是没有直接的方法可以做到这一点 因此,您需要为@ExceptionHandler注释的方法提供建议,如下所示

我正在我的应用程序中集中异常处理。但是我希望消息被国际化,并且应该保存在属性文件中。为此,我计划保留带有控制器的完全限定名并附加.message的密钥。因此,我的@ControllerAdvice标记类将处理异常,并根据“exception.ControllerName的完全限定名”从属性文件中获取消息,问题是我没有从异常发生的位置获取控制器名称和方法签名。有什么方法可以做到这一点吗?

但是没有直接的方法可以做到这一点

因此,您需要为
@ExceptionHandler
注释的方法提供
建议,如下所示

@Aspect
public class ExceptionLogging {

@Around(execution("@annotation(ExceptionHandler)"))
public Object logException(ProceddingJoinPoint pjp){
    String name = pjp.getSignature().getName(); // tweak this as per your requirement
    logger.info("Controller where Exception was raised - " + name);
    Object obj = pjp.proceed();
    return obj;
  }

}

@ControllerAdvice内部使用AOP权限??那么为什么不把它作为一部分提供呢?可能是因为你的要求太具体了。。。不过,您可以在Spring未来版本中请求此功能。我的要求很简单。我希望使用ControllerAdvice为所有控制器级别的类提供一个集中的异常处理,我知道AOP,但我认为实现它将以与使用AOP相同的方式工作。我可能对ControllerAdvice的用途有误解。从
@ControllerAdvice
文档-
中,它通常用于定义适用于所有@RequestMapping方法的@ExceptionHandler、@InitBinder和@ModelAttribute方法,这些方法清楚地说明了它的用途。如前所述,您可以请求此功能,如果社区认为它合适,它将成为未来版本的一部分。它现在作为功能从4.2版开始在Spring中提供。我在Spring中将其作为功能请求报告。在这里:将从spring版本4.2中提供