我的控制器中有一个方法可以处理应用程序抛出的异常。所以我有一个像这样的方法。
@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.
可能是什么问题?
感谢。
答案 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的改进。