项⽬通⽤解决⽅案 - 异常统⼀处理
1.1 什么是通⽤异常
⽬前的代码中如果发⽣系统异常,则直接会给⽤户抛出不友好的异常信息。为了增加⽤户的体验,应该给⼀些适当信息进⾏提⽰。例如删除频道的代码,如下
⽬前红框圈起来的是可以给⽤户友好提⽰的,但是当执⾏删除这⼀⾏代码,如何失败了该如何处理。有可能系统会抛出异常。那这个时候就不应该把异常信息直接返回给⽤户。那该如何处理呢?
项⽬开发中肯定会设置全局异常处理,不管系统发⽣了任何不可知的异常信息,都应该给⽤户返回友好提⽰信息。
1.2 通⽤异常配置
在heima-leadnews-common模块中新建类ExceptionCatchpackage com.heima.common.exception;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;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;@ControllerAdvice//控制器增强@Log4j2
public class ExceptionCatch {
//捕获Exception此类异常
@ExceptionHandler(Exception.class) @ResponseBody
public ResponseResult exception(Exception exception) { exception.printStackTrace(); //记录⽇志
log.error(\"catch exception:{}\ //返回通⽤异常
return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR); }}
@ControllerAdvice 控制器增强注解
@ExceptionHandler 异常处理器 与上⾯注解⼀起使⽤,可以拦截指定的异常信息
1.3 集成到项⽬中使⽤
在heima-leadnews-admin模块中新增类ExceptionCatchConfigpackage com.heima.admin.config;
import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan(\"com.heima.common.exception\")public class ExceptionCatchConfig {}
1.4 测试
如:在删除频道的时候传的id为数值类型,如果不添加全局异常返回如下:
添加异常信息以后,返回如下:
因篇幅问题不能全部显示,请点此查看更多更全内容