使用场景:删除检查项,先在数据库中查询该项有没有被添加到检查组,若查询到已被添加,则返回这个自定义的异常
自定义异常:
package com.jacob.entity;public class CheckItemDeleteException extends Exception{public CheckItemDeleteException() {}public CheckItemDeleteException(String message) {super(message);} }
检查项service impl,检查项服务接口实现类//删除检查项,先查询要删除的检查项有没有被添加到检查组public void delete(String itemId) throws CheckItemDeleteException {int countCheckItem = checkItemDao.countCheckItem(itemId);if (countCheckItem!=0){ //Add exception to method signature,直接在方法抛出异常,交给上层处理throw new CheckItemDeleteException("该项已被添加到检查组");}else{checkItemDao.delete(itemId);}}不能这样:这样异常抛不到上层
//删除检查项,先查询要删除的检查项有没有被添加到检查组public void delete(String itemId) {int countCheckItem = checkItemDao.countCheckItem(itemId);if (countCheckItem!=0){try {throw new CheckItemDeleteException("该项已被添加到检查组");} catch (CheckItemDeleteException e) {e.printStackTrace();}}else{checkItemDao.delete(itemId);}}
Controller层,可以定位出发生了什么异常,而不是简单的返回删除失败
@RequestMapping("/delete")/* @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);*/public Result delete(String itemId){try {checkItemService.delete(itemId);} catch (Exception e) {if(e instanceof CheckItemDeleteException){return new Result(false,"该项已被添加到检查组");}return new Result(false, MessageConstant.DELETE_CHECKITEM_FAIL);}return new Result(true, MessageConstant.DELETE_CHECKITEM_SUCCESS);}