1.@ControllerAdvice注解
@ControllerAdvice是控制器增强注解。可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中。
启动应用后,被 @ExceptionHandler、@InitBinder、@ModelAttribute 注解的方法,都会作用在 被 @RequestMapping 注解的方法上。
@ExceptionHandler 拦截了异常,我们可以通过该注解实现自定义异常处理。其中,@ExceptionHandler 配置的 value 指定需要拦截的异常类型,下面拦截了 Exception.class 这种异常。
这里主要说一下@ControllerAdvie与@ExceptionHandler结合使用。话不多说,直接上代码,实践与使用才是王道。
2.异常拦截器代码
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ResourceBundle;
//Log4j2使用lombok
@Log4j2
@ControllerAdvice
public class ApiExceptionAspect {
@ResponseBody
@ExceptionHandler(value = Exception.class)
public ChendaResponse handleException(Exception e){
return getExceptionResonseVo(e);
}
private ChendaResponse getExceptionResonseVo(Exception e){
ChendaResponse chendaResponse = new ChendaResponse();
if (e instanceof RuntimeException) {
log.info("运行时异常: {}" + e.getMessage());
chendaResponse.setStatus("failure");
} else if (e instanceof Exception) {
log.info("运行时异常: {}" + e.getMessage());
chendaResponse.setStatus("failure");
}
log.info("staus:" + chendaResponse.getStatus());
return chendaResponse;
}
}
注:其中ChendaResponse是封装类,
包括status(String)、errCode(String)、errMessage(String)、object(Object)等字段。