首先,我们需要使用注解@ControllerAdvice,再结合@ExceptionHandler可以用于全局异常的处理。这里对这两个注解不做解释。
1、返回Json格式数据、
注:返回类ResponseJsonModel类是自定义类,其中包含属性如下:
public class ResponseJsonModel<T> {
//是否成功,true:成功;false:失败
private Boolean result;
private int code;
private String errorMessage;
//接口返回数据
private T data;
}
如果我们使用RestFul风格的API,返回都是JSON数据,在处理方法上添加@ResponseBody注解,如下代码
/**
* @Date: 2019/7/4 10:38
* @Author: do you know
* @Description:
*/
@ControllerAdvice
public class GlobalExceptionHandler {
/*
* 日志
*/
private final static Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseJsonModel jsonExceptionHandler(HttpServletRequest request, Exception e) {
ResponseJsonModel responseJsonModel = new ResponseJsonModel ();
//打印异常URL和异常内容
logger.error("Error_URL:" + request.getRequestURI(), e);
//设置请求结果为false
responseJsonModel.setResult(false);
//统一返回101码
responseJsonModel.setCode(101);
//设置返回的错误信息
responseJsonModel.setErrorMessage(e.getMessage());
return responseJsonModel;
}
}
2、返回ModelAndView,返回error页面
@ControllerAdvice
class GlobalExceptionHandler {
public static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(Exception.class)
public ModelAndView viewException Handler(HttpServletRequest req, Exception e) {
ModelAndView modelAndView = new ModelAndView();
//将异常信息设置如modelAndView
modelAndView.addObject("exception", e);
modelAndView.addObject("url", req.getRequestURL());
modelAndView.setViewName(DEFAULT_ERROR_VIEW);
//返回ModelAndView
return modelAndView;
}
}
然后将ModelAndView 映射到我们自定义的exception页面中就可以了。