我希望实现一个"ExceptionController“来处理在执行其他控制器的方法时抛出的异常。我没有在我的应用程序上下文中指定任何HandlerExceptionResolver,因此根据API documentation,应该启动AnnotationMethodHandlerExceptionResolver。我在源代码中进行了验证。那么为什么下面的方法不起作用呢?
@Controller
public class ExceptionController {
@ExceptionHandler(NullPointerException.class)
public ModelAndView handleNullPointerException(NullPointerException ex) {
// Do some stuff
log.error(logging stuff)
return myModelAndView;
}
}
@Controller
public class AnotherController {
@RequestMapping(value="/nullpointerpath")
public String throwNullPointer() {
throw new NullPointerException();
}
}
我在调试日志中看到,三个默认的异常处理程序被要求处理异常,但是什么也没有做,我看到"DispatcherServlet - and‘t complete request“。接着是用户正在显示的堆栈跟踪和500内部错误。
发布于 2010-04-14 07:00:57
确保您的异常处理程序返回存在/映射到处理程序的视图。
发布于 2010-12-29 16:01:54
您应该将您的异常处理程序写到您想要处理的同一个类中,如下所示。
@Controller
public class AnotherController {
@ExceptionHandler(NullPointerException.class)
public ModelAndView handleNullPointerException(NullPointerException ex) {
// Do some stuff.
log.error(logging stuff)
return myModelAndView;
}
@RequestMapping(value="/nullpointerpath")
public String throwNullPointer() {
throw new NullPointerException();
}
}
发布于 2010-04-14 06:20:40
我不认为这是一个好的设计。Spring中的控制器处理HTTP请求并映射到URL。我不认为“例外”适用于这两种情况。对我来说,这感觉像是对Spring的滥用。
例外不是HTTP请求。您不能将异常映射到URL。因此,我得出的结论是,控制器并不打算被视为异常处理程序。
控制器是Spring API的一部分,但是您的设计没有按预期使用它们,所以这就是它不能工作的原因。重新思考你的设计。
https://stackoverflow.com/questions/2633451
复制相似问题