在项目中如何处理出现的异常,以前通常的作法是继承Exception或实现Runnable接口来封装自定义异常,然后在项目代码中通过try...catch语句块来捕获到出现的异常,封装到我们自己定义的异常类中。如果项目中使用的SpringMVC框架的话,这里介绍另外一种也比较方便的异常处理方法,本人还是比较喜欢这种处理方式。这里用到的是ExceptionHandler这个注解。

1、首先新建一个名为BaseController的抽象类;
public
abstract
class
BaseController {
@ExceptionHandler
public
String exception(HttpServletRequest
request
, Exception
e
) {
// 根据不同的异常类型进行不同处理
if
(
e
instanceof
SQLException) {
String
s
=
"数据库异常"
;
request
.setAttribute(
"exceptionMessage"
,
s
);
return
"error"
;
}
else
if
(
e
instanceof
IOException){
String
s
=
"IO异常"
;
request
.setAttribute(
"exceptionMessage"
,
s
);
return
"error"
;
}
else
return
"error"
;
}
}
该方法需要定义在Controller内部,然后创建一个方法并用@ExceptionHandler注解来修饰用来处理异常,这个方法基本和 @RequestMapping修饰的方法差不多,只是可以多一个类型为Exception的参数,@ExceptionHandler中可以添加一个或多个异常的类型,如果为空的话则认为可以触发所有的异常类型错误,返回值为视图名。
2、以后让每个controller类继承定义的BaseController即可;
@Controller
@RequestMapping
(value=
"/login"
)
public
class
LoginController
extends
BaseController{
private
Logger
logger
= Logger.getLogger(LoginController.
class
);
private
JsonGenerator
jsonGenerator
=
null
;
@Autowired
IUserService
userService
;
@RequestMapping
(value=
"/login"
)
public
String login()
throws
Exception{
logger
.info(
"login...."
);
//这里模拟抛出一个SQL异常信息
throw
new
SQLException();
}
}
3、最后定义一个error.jsp页面
<%@
page
language
=
"java"
contentType
=
"text/html; charset=utf-8"
pageEncoding
=
"utf-8"
%>
<%@
taglib
prefix
=
"c"
uri
=
"http://java.sun.com/jsp/jstl/core"
%>
<
html
>
<
body
>
${exceptionMessage}
</
body
>
</
html
>
运行效果:
当然如果习惯用配置文件的伙伴,也可以通过Spring配置文件来实现。