【发布时间】:2014-02-19 15:18:27
【问题描述】:
我正在开发一个 Spring MVC/Webflow 应用程序(版本 3.2),并试图让异常处理工作,我可以将自定义异常消息输出到日志文件和 error.jsp。我遇到的问题是异常处理程序没有被解雇。我创建了以下类并将其注释为“@ControllerAdvice”并将其放入与引发异常的控制器相同的包中:
@ControllerAdvice
public class MyCustomExceptionController {
@ExceptionHandler(MyCustomException.class)
public ModelAndView handleMyException(MyCustomException ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/error/error");
modelAndView.addObject("errorId", ex.getErrorId());
modelAndView.addObject("message", ex.getErrorMessage());
return modelAndView;
}
}
并将以下内容添加到 mvc-config 文件中:
<mvc:annotation-driven/>
并在我的 app-config 文件中包含以下内容:
<context:component-scan base-package="package containing my controllers and MyCustomExceptionController">
<context:include-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>
任何想法为什么这不起作用?
【问题讨论】:
-
方法
handleMyException()只会在您选择的未处理的自定义异常发生时调用 (MyCustomException)。即使在抛出MyCustomException之后,这个方法是否不被调用? This 是您可能会更接近的教程。 -
我在 handleMyException 上放了一个断点,即使我抛出 MyCustomException,该方法也永远不会被调用。
-
如果您要在此类中使用
@InitBinder注释来注释您选择的方法,例如,该方法是否被调用? -
嗨 Tiny,我在同一个类中添加了以下测试方法,但它从未被调用:@InitBinder public void InitBinder() { System.out.println("In InitBinder method"); }
-
我有this 配置文件(
dispatcher-servlet.xml)。您想将它与您的配置文件进行比较吗?除此之外,我在另一个文件applicationContext.xml中指定了<context:annotation-config/>,但这应该与您面临的具体问题无关。@ControllerAdvice注释在 Spring 3.2.2 和 Spring 4.0.0 GA 中都适用于这些配置(免责声明:我不了解 Spring WebFlow)。
标签: java spring spring-mvc exception-handling