4 删除页面
用户操作流程:
1、用户进入用户列表,点击“删除”
2、执行删除操作,提示“删除成功”或“删除失败”
4.1 删除页面接口定义
[AppleScript] 纯文本查看 复制代码 @ApiOperation("通过ID删除页面")
public ResponseResult delete(String id);
4.2 删除页面服务端开发
4.2.1Dao
使用 Spring Data提供的deleteById方法完成删除操作 。
4.2.2 Service
[AppleScript] 纯文本查看 复制代码 //删除页面
public ResponseResult delete(String id){
CmsPage one = this.getById(id);
if(one!=null){
//删除页面
cmsPageRepository.deleteById(id);
return new ResponseResult(CommonCode.SUCCESS);
}
return new ResponseResult(CommonCode.FAIL);
}
4.2.3Controller
[AppleScript] 纯文本查看 复制代码 @DeleteMapping("/del/{id}") //使用http的delete方法完成岗位操作
public ResponseResult delete(@PathVariable("id") String id) {
return pageService.delete(id);
}
4.3 删除页面前端开发
4.3.1 Api方法
[AppleScript] 纯文本查看 复制代码 /*页面删除*/ export const page_del = id => {
return http.requestDelete(apiUrl+'/cms/page/del/'+id)
}
4.3.2编写页面
1、在page_list.vue页面添加删除按钮
[AppleScript] 纯文本查看 复制代码 <el‐table‐column label="操作" width="120">
<template slot‐scope="page">
<el‐button
size="small"type="text"
@click="edit(page.row.pageId)">编辑
</el‐button>
<el‐button
size="small"type="text"
@click="del(page.row.pageId)">删除
</el‐button>
</template>
</el‐table‐column>
2、删除事件
[AppleScript] 纯文本查看 复制代码 //删除
del:function (pageId) {
this.$confirm('确认删除此页面吗?', '提示', {}).then(() => {
cmsApi.page_del(pageId).then((res)=>{
if(res.success){
this.$message({
type: 'success',
message: '删除成功!'
});
//查询页面
this.query()
}else{
this.$message({
type: 'error',
message: '删除失败!'
});
}
})
})
}
5 异常处理 5.1 异常处理的问题分析
从添加页面的service方法中找问题:
[AppleScript] 纯文本查看 复制代码 //添加页面
public CmsPageResult add(CmsPage cmsPage){ //校验页面是否存在,
根据页面名称、站点Id、页面webpath查询
CmsPage cmsPage1 =
[AppleScript] 纯文本查看 复制代码 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捕获异常,向用户返回统一规范的响应信息。
代码模板如下:
[AppleScript] 纯文本查看 复制代码 //添加页面 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; }
|