学成在线--7.CMS页面管理开发(异常处理)

本文主要探讨了CMS页面管理开发中的异常处理问题,包括异常处理的分析、流程和具体实现。通过自定义异常类、异常抛出和捕获机制,解决了服务返回信息不具体和代码冗余的问题。异常处理分为可预知和不可预知两类,前者通过程序员主动抛出并捕获,后者由SpringMVC统一处理。在测试中,对异常处理进行了详细的设计和实现,确保了客户端能接收到规范的错误信息。
摘要由CSDN通过智能技术生成

1.异常处理的问题分析

从添加页面的service方法中找问题:
文件位置:com/ xuecheng/ manage_cms/ service/ PageService

//添加页面
public CmsPageResult add(CmsPage cmsPage){
   
//校验页面是否存在,根据页面名称、站点Id、页面webpath查询
CmsPage cmsPage1=cmsPageRepository.findByPageNameAndSiteIdAndPageWebPath(cmsPage.getPageName(),cmsPage.getSiteId(),cmsPage.getPageWebPath());
if(cmsPage1==null){
   
cmsPage.setPageId(null);//添加页面主键由spring data 自动生成
cmsPageRepository.save(cmsPage);
//返回结果
CmsPageResult cmsPageResult = new CmsPageResult(CommonCode.SUCCESS,cmsPage);
return cmsPageResult;
} 
return new CmsPageResult(CommonCode.FAIL,null);
}

问题:
1)上边的代码只要操作不成功仅向用户返回“错误代码:11111,失败信息:操作失败”,无法区别具体的错误信
息。
2)service方法在执行过程出现异常在哪捕获?在service中需要都加try/catch,如果在controller也需要添加
try/catch,代码冗余严重且不易维护。

解决方案:
1)在Service方法中的编码顺序是先校验判断,有问题则抛出具体的异常信息,最后执行具体的业务操作,返回成
功信息。
2)在统一异常处理类中去捕获异常,无需controller捕获异常,向用户返回统一规范的响应信息。

代码模板如下:

//添加页面
public CmsPageResult add(CmsPage cmsPage){
   
//校验cmsPage是否为空
if(cmsPage == null){
   
//抛出异常,非法请求
//...
}
//根据页面名称查询(页面名称已在mongodb创建了唯一索引)
CmsPage cmsPage1 =cmsPageRepository.findByPageNameAndSiteIdAndPageWebPath(cmsPage.getPageName(),cmsPage.getSiteId(),cmsPage.getPageWebPath());
//校验页面是否存在,已存在则抛出异常
if(cmsPage1 !=null){
   
//抛出异常,已存在相同的页面名称
//...
} 
cmsPage.setPageId(null);//添加页面主键由spring data 自动生成
CmsPage save = cmsPageRepository.save(cmsPage);
//返回结果
CmsPageResult cmsPageResult = new CmsPageResult(CommonCode.SUCCESS,save);
return cmsPageResult;
}

2.异常处理流程

系统对异常的处理使用统一的异常处理流程:
1、自定义异常类型。
2、自定义错误代码及错误信息。
3、对于可预知的异常由程序员在代码中主动抛出,由SpringMVC统一捕获。
可预知异常是程序员在代码中手动抛出本系统定义的特定异常类型,由于是程序员抛出的异常,通常异常信息比较齐全,程序员在抛出时会指定错误代码及错误信息,获取异常信息也比较方便。
4、对于不可预知的异常(运行时异常)由SpringMVC统一捕获Exception类型的异常。
不可预知异常通常是由于系统出现bug、或一些不要抗拒的错误(比如网络中断、服务器宕机等),异常类型为RuntimeException类型(运行时异常)。
5、可预知的异常及不可预知的运行时异常最终会采用统一的信息格式(错误代码+错误信息)来表示,最终也会随请求响应给客户端。

在这里插入图片描述
1、在controller、service、dao中程序员抛出自定义异常;springMVC框架抛出框架异常类型
2、统一由异常捕获类捕获异常,并进行处理
3、捕获到自定义异常则直接取出错误代码及错误信息,响应给用户。
4、捕获到非自定义异常类型首先从Map中找该异常类型是否对应具体的错误代码,如果有则取出错误代码和错误信息并响应给用户,如果从Map中找不到异常类型所对应的错误代码,则统一为99999错误代码并响应给用户。
5、将错误代码及错误信息以Json格式响应给用户。

3.可预知异常处理

1.自定义异常类

文件位置:com/ xuecheng/ framework/ exception/ CustomException

package com.xuecheng.framework.exception;

import com.xuecheng.framework.model.response.ResultCode;

/**
 * 自定义异常类型
 **/
public class CustomException extends RuntimeException {
   

    //错误代码
    ResultCode resultCode;

    public CustomException(ResultCode resultCode){
   
        this.resultCode = resultCode;
    }
    public ResultCode getResultCode(){
   
        return resultCode;
    }
    
}

2.异常抛出类

文件位置:com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值