异常处理
SpringBoot的异常处理
@ControllerAdvice
public class ExceptionControllerAdvice {
private final static Logger LOGGER = LoggerFactory.getLogger(ExceptionControllerAdvice.class);
@ExceptionHandler(BusinessException.class)
@ResponseBody
public Result<?> handleBusinessException(HttpServletRequest request,
Exception e) {
return handleException(request, e, false);
}
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
@ResponseBody
public ResponseEntity<Integer> handleMethodNotSupportedException(HttpServletRequest request,
Exception e) {
return ResponseEntity.badRequest().body(null);
}
@ExceptionHandler(Exception.class)
@ResponseBody
public Result<?> handleOtherException(HttpServletRequest request,
Exception e) {
return handleException(request, e, true);
}
private Result<?> handleException(HttpServletRequest request,
Exception e,
boolean logger) {
String errMsg = ExceptionUtils.getErrorMessage(e);
String strError = StringUtils.isEmpty(errMsg) ? e.getMessage() : errMsg;
ResultCode respondCode = ResultCode.get(strError);
if (logger) {
LOGGER.error(strError, e);
e.printStackTrace();
}
if (respondCode == null) {
return Result.error(strError);
} else {
return Result.create(respondCode);
}
}
登录拦截
一,自定义拦截类
public class LoginInterceptor implements HandlerInterceptor {
private static final Logger log = LoggerFactory.getLogger(LoginInterceptor.class);
/**
* 进入controller层之前拦截请求
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
log.info("---------------------开始进入请求地址拦截----------------------------");
HttpSession session = httpServletRequest.getSession();
UserInfo userInfo = (UserInfo)session.getAttribute("user");
if(userInfo!=null){
return true;
}
else{
//PrintWriter printWriter = httpServletResponse.getWriter();
//printWriter.write("{code:0,message:\"会话已过期,请重新登录!\"}");
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/admin");
return false;
}
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
log.info("--------------处理请求完成后视图渲染之前的处理操作---------------");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
log.info("---------------视图渲染之后的操作-------------------------0");
}
}
二、在Application类中,声明拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册自定义拦截器,添加拦截路径和排除拦截路径
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/admin/**")
.excludePathPatterns("/admin/login.do").excludePathPatterns("/admin");
}