spring 全局统一处理异常

记下两种方法:

一、使用注解 @controllerAdvice 和 @ExceptionHandler

@ControllerAdvice,是spring3.2提供的新注解

需要把@ControllerAdvice包含进来,否则不起作用:

  
         
         
  
@ControllerAdvice  
@EnableWebMvc 
@Component 
public class GlobalExceptionHandler{  
  
    @ExceptionHandler(AjaxException.class)  
    @ResponseBody  
    public ErrorInfoajaxException(HttpServletRequest req,Exception e){  
        ErrorInfo errInfo = new ErrorInfo();  
        errInfo.setCode(ErrorInfo.ERROR);  
        errInfo.setMessage(e.getMessage());  
        errInfo.setUrl(req.getRequestURI().toString());  
        errInfo.setData("some data");  
        return errInfo;  
    }  
  
  
}  
在类上加注解 @ControllerAdvice 所有的异常都会被它捕获,通过 @ExceptionHandler (Exception.class)来选择不同异常的处理方法。

二、 spring自定义异常拦截:

@Component  
public class MyHandlerExceptionResolver implements HandlerExceptionResolver  {  
  
    @Override  
    public ModelAndView resolveException(HttpServletRequest request,  
            HttpServletResponse response, Object object, Exception exception) {  
        //是否为ajax请求  
        String requestType = request.getHeader("X-Requested-With");  
         if(exception instanceof AuthorizationException){  
            response.setStatus(413);//无权限异常  主要用于ajax请求返回  
            response.addHeader("Error-Json", "{\"code\":413,\"msg\":\"nopermission\"}");  
            response.setContentType("text/html;charset=utf-8");  
            if("XMLHttpRequest".equals(requestType)){  
                return new ModelAndView();  
            }  
            return new ModelAndView("redirect:/html/413.html");  
        }  
        return null;  
    } 
}
实现了接口  HandlerExceptionResolver 进行异常全局统一处理。



你可能感兴趣的:(spring 全局统一处理异常)