@ExceptionHandler不处理抛出的异常

时间:2010-05-20 08:32:59

标签: java spring jsp exception-handling spring-mvc

我的控制器中有一个方法可以处理应用程序抛出的异常。所以我有一个像这样的方法。

@Controller
public class ExceptionController {

    @RequestMapping(value="/error")
    @ExceptionHandler(value={Exception.class, NullPointerException.class})
    public String showError(Exception e, Model model){
        return "tiles:error";
    }
}

试试我是否有效我在其他方法控制器中的另一个方法中抛出NullPointerException:

boolean a = true;
if(a){ 
    throw new NullPointerException();
}

抛出异常后,它会在JSP中打印出来,但它不会抛出我的showError()方法(我在那里设置了一个断点,它永远不会进入)。 showError()方法将捕获异常并根据异常类型显示不同的错误页面(尽管现在它总是显示相同的错误页面)。如果我转到url / error,它会显示错误页面,因此showError()方法正常。

我正在使用Spring 3.

可能是什么问题?

感谢。

2 个答案:

答案 0 :(得分:7)

如果查看日志,您可能会看到:

  

java.lang.IllegalStateException:   不支持的论点   [org.springframework.ui.Model]   @ExceptionHandler方法

换句话说,@ExceptionHandler方法不允许声明Model参数(请参阅docs)。

删除该参数(无论如何都不使用),它应该按预期工作。

答案 1 :(得分:0)

如果你想全局处理异常(在你的控制器之外),那么你可以使用@ControllerAdvice带注释的类来放置@ExceptionHandler带注释的方法。

请参阅http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc以获取示例。 并http://blog.codeleak.pl/2013/11/controlleradvice-improvements-in-spring.html了解了春季4的改进。