我创建了自己的异常并尝试使用spring MVC来处理它。
Spring处理所有异常,除了我自己的异常(User Defined)。 有什么问题,如何在Spring MVC中处理用户定义的异常?
我在我的控制器和@ExceptionHandler
中使用了@ControllerAdvice
,在Dispatcher servlet中使用了SimpleMappingExceptionResolver
bean没有帮助。在每个阶段,所有系统定义的异常都按预期处理。
用户定义的例外:
public class GeneralUserException extends Exception {
private static final long serialVersionUID = 1L;
String message;
public GeneralUserException (String message){
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
控制器中的异常处理程序:
@ExceptionHandler(value = GeneralUserException.class)
public String defaultErrorHandler(HttpServletRequest req, GeneralUserException e) {
return "general_error";
}
@ControllerAdvice中的异常处理程序:
@ControllerAdvice
class GlobalDefaultExceptionHandler {
@ExceptionHandler(value = GeneralUserException.class)
public String defaultErrorHandler(HttpServletRequest req, GeneralUserException e) {
return "general_error";
}
}
调度程序Servlet上下文中的Bean(WebAppConfig):
public class WebAppConfig extends WebMvcConfigurerAdapter{
@Bean
public SimpleMappingExceptionResolver createSimpleMappingExceptionResolver() {
SimpleMappingExceptionResolver r = new SimpleMappingExceptionResolver();
Properties mappings = new Properties();
mappings.setProperty("GeneralUserException", "general_error");
r.setExceptionMappings(mappings);
r.setDefaultErrorView("error");
return r;
}
...
}
所有这些都没有显示错误页面。但是,当我将GeneralUserException
更改为Exception
/ RuntimeException
时,它就有效。我试图把完全合格的名字。
我使用spring,spring MVC,spring Security如果有帮助的话。而且我不会使用Spring Aspects。
注意: SimpleMappingExceptionResolver
正在返回"错误" DefaultErrorView
的错误页面(因此其工作)。当我使用RuntimeException
代替GeneralUserException
时,它会返回" general_error"查看它是否适用于RuntimeException
。