阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_17-异常处理-可预知异常处理-异常处理测试

 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);
    }
}


 

原文地址:https://www.cnblogs.com/wangjunwei/p/11573282.html