一直在纠结于标题取什么名字好,读起来好拗口,算了,回归正题。
在网上看到SpringMVC配置异常处理都是返回一个jsp页面给客户,但是很多公司(包括我公司)的前端都是ExtJs,所有的请求都是Ajax请求,这样当后台发生异常时客户什么也看不到,也没有什么提示信息出来,公司以前用的是Struts2(现在还是),用的是一个拦截器,
public String intercept(ActionInvocation paramActionInvocation) throws Exception {
try{
paramActionInvocation.invoke();
}catch(Exception e){
String message = e.getMessage();
if (message == null){
message = "各种错误";
}
ServletActionContext.getResponse().getWriter().print("{failure:true, msg:'" + message + "'}");
}
return null;
}
这样前台就能弹出信息了。注意还要在把struts中默认的的异常拦截器去掉。
跑题了,SpringMVC中类似,只不过用的不是拦截器,是框架提供的异常处理支持。
一种方法是在Controller类中使用@ExceptionHandler注解,但是局限是只能在该类中使用。
@ExceptionHandler
public @ResponseBody String handleException() {
return "ajax 错误信息";
}
另一种方法是实现HandlerExceptionResolver接口,并注册之。
resolveException方法代码:简单。
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
response.setCharacterEncoding("UTF-8");
try {
PrintWriter writer = response.getWriter();
writer.write("ajax 错误信息");
writer.flush();
} catch (IOException e) {
}
return null;
}