本文主要是介绍拦截器(二):使用@ControllerAdvice与@ExceptionHandler拦截异常,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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)等字段。
这篇关于拦截器(二):使用@ControllerAdvice与@ExceptionHandler拦截异常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!