SpringBoot全局异常处理方式
每个项目全局异常处理非常重要, 今天在处理项目架构的时候添加了一个全局异常处理。
大概三种异常情况:
一:在进入Controller之前,譬如请求一个不存在的地址,404错误。
二:在执行@RequestMapping时,进入逻辑处理阶段前。譬如传的参数类型错误。
三:以上都正常时,在controller里执行逻辑代码时出的异常。譬如NullPointerException。
一
@RestController public class FinalExceptionHandler implements ErrorController { @Override public String getErrorPath() { return "/error"; } @RequestMapping(value = "/error") public Object error(HttpServletResponse resp, HttpServletRequest req) { // 错误处理逻辑 return "其他异常"; } }
二、三
import static org.springframework.http.HttpStatus.NOT_EXTENDED; /** * Created by mazhq on 2018/7/10 * 全局异常处理 */ @ControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 在controller里面内容执行之前,校验一些参数不匹配啊,Get post方法不对啊之类的 */ @Override protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { System.out.println("错误"); return new ResponseEntity<Object>(BaseCode.retCode(ResultCode.parmFarmat).toString(), NOT_EXTENDED); } @ExceptionHandler(value = Exception.class) @ResponseBody public String jsonHandler(HttpServletRequest request, Exception e) { logger.error("请求路径:"+request.getRequestURL().toString()+"; 发生错误!"); log(e, request); return BaseCode.retCode(ResultCode.failure).toString(); } private void log(Exception ex, HttpServletRequest request) { logger.error("************************异常开始*******************************"); logger.error("异常信息:", ex); logger.error("请求地址:" + request.getRequestURL()); Enumeration enumeration = request.getParameterNames(); logger.error("请求参数"); while (enumeration.hasMoreElements()) { String name = enumeration.nextElement().toString(); logger.error(name + "---" + request.getParameter(name)); } StackTraceElement[] error = ex.getStackTrace(); for (StackTraceElement stackTraceElement : error) { logger.error(stackTraceElement.toString()); } logger.error("************************异常结束*******************************"); } }
这两个方法基本可以解决未处理异常问题,在其中可以添加自己的业务逻辑,自由发挥。
作者:森林木马
-------------------------------------------
特此声明:所有评论和私信都会在第一时间回复。也欢迎朋友们指正错误,共同进步!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
个性签名:好记性不如勤随笔,好随笔还请多关注!