springboot2 全局异常处理【2】自定义异常

381 阅读1分钟
  1. 自定义超时异常
/**
 * 登陆超时异常
 * 继承RuntimeException,不用在方法头上,显式抛出
 * 继承Exception,需要在方法头上,显式抛出
 * @author hedong
 * @date 2018年12月16日 上午11:19:19
 * @modifyNote
 * @version 1.0
 */
public class TimeoutException extends RuntimeException {

	public TimeoutException() {
		super();
	}
}
  1. 在Controller中抛出异常
@GetMapping("getExpt")
	public Object getExpt() {
//		throw new ServiceException("499","自定义异常");
		throw new TimeoutException();//自定义超时异常
	}
  1. 统一异常处理类
@RestControllerAdvice
public class CustomExceptionHandler {
	
	public static final Logger logger=LoggerFactory.getLogger(CustomExceptionHandler.class);
	
	/**
	 * Exception 需要处理的异常
	 * @Description
	 * @author hedong
	 * @date 2018年12月13日 下午11:00:55
	 * @modifyNote 
	 * @param ex
	 * @param request
	 * @return
	 */
	@ExceptionHandler(Exception.class)
	Object handException(Exception ex,HttpServletRequest request) {
		
		logger.error("请求url:{}, 异常消息信息: {} ", request.getRequestURI(),ex.getMessage());
		logger.error("详细异常信息:", ex);
		
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("code", 100);
		map.put("msg", "发生异常");
		map.put("url",request.getRequestURI());
		return map;
	}
	
	@ExceptionHandler(ServiceException.class)
	Object handleMyException(ServiceException ex) {
		
		//跳转到制定页面
//		ModelAndView mv=new ModelAndView();
//		mv.setViewName("error.html");
//		mv.addObject("msg", ex.getMessage());
//		return mv;
		
		//返回消息
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("code", ex.getCode());
		map.put("msg", ex.getMsg());
		return map;
		
	}
	
	@ExceptionHandler(TimeoutException.class)
	Object handleTimeoutException(Exception ex) {
		
//		跳转到制定页面
		ModelAndView mv=new ModelAndView();
		mv.setViewName("loggin.html");
		return mv;
		
	}

}