方法一
实现HandlerExceptionResolver接口
创建一个类实现接口
package com.common.exception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/**
* 全局错误处理类
* @author YYQ
*
*/
public class MyExceptionResolver implements HandlerExceptionResolver{
private static final Logger logger = Logger.getLogger(MyExceptionResolver.class);
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 日志打印
logger.info("错误类型:"+ex.getClass().getSimpleName());
logger.info("错误信息:"+ex.getMessage());
logger.info("错误原因:"+ex.getCause());
// 跳转错误界面
ModelAndView mv = new ModelAndView("/error/showError");
mv.addObject("msg", ex.getMessage());
return mv;
}
}
在spring-mvc.xml中配置
<!-- 异常处理 -->
<bean id="myExecptionResolver" class="com.common.exception.MyExceptionResolver"/>
方式二
直接web.xml中配置跳转页面
<!-- 错误跳转页面 -->
<error-page>
<error-code>400</error-code>
<location>/WEB-INF/views/error/400.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/error/404.jsp</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/WEB-INF/views/error/405.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/views/error/500.jsp</location>
</error-page>
页面文件
方式三
使用@ControllerAdvice和@ExceptionHandler注解
创建一个类来实现处理
package com.common.exception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.common.vo.Result;
/**
* 异常处理类
* @author YYQ
*
*/
@ControllerAdvice
public class MyExceptionHandler {
/**
* 全局异常返回json格式
* @param requset
* @param response
* @param ex
* @return
*/
@ExceptionHandler
@ResponseBody
public Result<?> handleAndReturnData(HttpServletRequest requset, HttpServletResponse response, Exception ex){
return Result.fail("操作异常:"+ex.toString());
}
}
在spring-mvc.xml中配置
<!-- 全局异常处理 -->
<context:component-scan base-package="com.common.exception" />
推荐使用方式三
【本人使用的是方式二和方式三的组合:
跳转路径找不到时方式二会跳转到错误页面,
请求接口错误时方式三提示错误信息】
这里的@ExceptionHandler注解方法返回对象Result,可以修改成跳转界面ModelAndView(需要除去@ResponseBody)
当然除了@ExceptionHandler注解还有其他作用的
如:@ModelAttribute、@InitBinder