SpringBoot2全局异常处理

本文介绍了一种在Spring框架中实现全局异常处理的方法,通过使用@ControllerAdvice和@ExceptionHandler注解,可以有效地捕获并处理应用中的所有异常,避免了错误信息以HTML页面形式返回的问题,同时提供了统一的错误信息格式。

问题背景

公司一个小程序后台的项目,一报错就返回一个html页面,实在蛋疼, 按道理,json接口,有问题,应该也是json格式返回,哪怕格式再补标准,但是至少也要可以返回可以跟踪调试错误的信息。

所以对项目进行了改造,只需要引入一个类,即可捕获全局异常。如果有自定义类型的异常,可以@ExceptionHandler(Exception.class)这里设置,

实战

import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GlobalDefaultExceptionHandler {
	
	@ExceptionHandler(Exception.class)
	@ResponseBody
	public Object defaultExceptionHandler(HttpServletRequest req, Exception e) {
		e.printStackTrace();
		return new ApiReturnObject("01","server error", e.getMessage());
		//这里的return错误信息,可以自定义,一般项目都有自定义返回的类
		//return e.getMessage();
		//return "{\"errorCode\":\"9\",\"errorMessage\":\""+e.getMessage()+"\"}";
	}
	
}

知识补充

Spring能够较好的处理异常处理的问题问题,核心如下,文章主要关注前两个:

  • @ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
  • @ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开
  • @ResponseStatus:可以将某种异常映射为HTTP状态码

这里我们主要讲@ExceptionHandler,该注解作用对象为方法,并且在运行时有效,value()可以指定异常类。由该注解注释的方法可以具有灵活的输入参数(详细参见Spring API):

异常参数:包括一般的异常或特定的异常(即自定义异常),如果注解没有指定异常类,会默认进行映射。

请求或响应对象 (Servlet API or Portlet API):

  • ServletRequest/HttpServletRequest、
  • PortleRequest/ActionRequest/RenderRequest。
  • Session对象(Servlet API or Portlet API): HttpSession或PortletSession。
    WebRequest或NativeWebRequest
  • Locale
  • InputStream/Reader
  • OutputStream/Writer
  • Model

方法返回值可以为:

  • ModelAndView对象
  • Model对象
  • Map对象
  • View对象
  • String对象
  • @ResponseBody
  • HttpEntity<?>
  • ResponseEntity<?>
  • void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值