ResultCode有很多的实现类
cmsCode有很多类型的错误异常
pgeService内当CmsPage这个对象为空的时候,异常类型就可以抛出CmsCode里面的错误代码
if(cmsPage1==null){
//throw new CustomException(CommonCode.FAIL);
ExceptionCast.cast(CmsCode.CMS_ADDPAGE_EXISTSNAME);
}
测试
测试添加,重复添加会报错。、
在这里加个断点
走到这里再继续往下走,就应该进入到捕获类了。
,
再继续往下走,。但是我们没有捕获类。所以这里就报500错误了。报了一个服务端错误。
刚才的这些类都是common工程下创建的
这里加的注解。被spring扫描到了吗
我们的spring boot的启动类并没有扫描common的包
所以springBoot的启动类 我们需要加上扫描common的包
@ComponentScan(basePackages={"com.xuecheng.framework"})//扫描common包下的类
重新启动spring boot项目。再次测试
代码放行
将来的信息想转换成json。所以在捕获类上面我们需要用一个注解。所以加上@ReponseBody
重新启动,再来测试。走到断点,。代码放行,swagger输出下面错误信息。拿到信息就可以在页面上给用户提示了
前端代码的修改
如果返回的json数据里面有message信息。那么就提示这个具体的错误信息
移交一个已经存在的数据
以上就是针对可预知的异常处理的流程。
总结
common的统一捕获类
捕获异常,取出错误代码。封装成ReponseResult, @ReponseBody 转成json 输出给前端。
这里记得 正式的用的时候 要改成 不等于null去判断页面已经存在了
最终代码
@ControllerAdvice public class ExceptionCatch { private static final Logger LOGGER= LoggerFactory.getLogger(ExceptionCatch.class); //捕获CustomException此类异常 @ExceptionHandler(CustomException.class) @ResponseBody public ResponseResult customException(CustomException customException){ //获取异常信息,日志记录异常 LOGGER.error("catch exception:{}",customException.getMessage()); ResultCode resultCode=customException.getResultCode(); return new ResponseResult(resultCode); } }