统一异常捕获

This commit is contained in:
chenwenjian 2023-08-21 09:41:15 +08:00
parent 1e4e9711b3
commit 37bedb908f
2 changed files with 71 additions and 4 deletions

View File

@ -1,7 +1,9 @@
package cn.axzo.nanopart.server.service.impl;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
@ -30,18 +32,27 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
/**
* 新增一条黑白名单记录
* @param req 包含module和param两个字段
* @param req 包含type,module和param三个字段
* @return 记录id
*/
@Override
public ApiResult<Long> create(BlackAndWhiteListReq req) {
// 黑白名单创建互斥,若存在于黑名单中则不允许存在于白名单中反之亦然
BlackAndWhiteListReq reverseReq = BeanMapper.copyBean(req, BlackAndWhiteListReq.class, (req1, req2) -> req2.setType((req1.getType().equals(ListTypeEnum.BLACK_LIST)) ? ListTypeEnum.WHITE_LIST : ListTypeEnum.BLACK_LIST));
if (isInBlackOrWhiteList(reverseReq).getData()){
throw new ServiceException("该记录已存在于"+reverseReq.getType().getDescription()+"中,不能创建对应"+req.getType().getDescription());
}
// 同类型名单内唯一性校验
if (isInBlackOrWhiteList(req).getData()){
throw new ServiceException("该记录已存在于"+req.getType().getDescription()+"");
}
return ApiResult.ok(blackAndWhiteListRepository.create(req));
}
/**
* 删除指定条件的所有黑白名单记录
*
* @param req 包含module和param两个字段
* @param req 包含type,module和param三个字段
* @return null
*/
@Override
@ -51,7 +62,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
/**
* 查询指定条件的所有黑白名单记录
* @param req 包含module和param两个字段
* @param req 包含type,module和param三个字段
* @return 记录列表
*/
@Override
@ -63,7 +74,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
/**
* 判断是否存在指定条件的黑白名单记录
* @param req 包含module和param两个字段
* @param req 包含type,module和param三个字段
* @return 记录存在返回true否则返回false
*/
@Override

View File

@ -0,0 +1,56 @@
package cn.axzo.nanopart.config.exception;
import cn.axzo.framework.domain.web.result.ApiResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
/**
* @author chenwenjian
* @date 2023/8/17 17:04
* @description 统一异常处理
* @modifiedBy
* @version: 1.0
*/
@Slf4j
@Order(value = 0)
@RestControllerAdvice
public class ExceptionAdviceHandler {
@ExceptionHandler(cn.axzo.basics.common.exception.ServiceException.class)
public ApiResult<Void> basicsServiceExceptionHandler(cn.axzo.basics.common.exception.ServiceException e) {
log.warn("业务异常", e);
return ApiResult.err(e.getMessage());
}
@ExceptionHandler(cn.axzo.core.service.ServiceException.class)
public ApiResult<Void> coreServiceExceptionHandler(cn.axzo.core.service.ServiceException e) {
log.warn("业务异常", e);
return ApiResult.err(e.getMessage());
}
@ExceptionHandler(cn.axzo.framework.domain.ServiceException.class)
public ApiResult<Void> domainServiceExceptionHandler(cn.axzo.framework.domain.ServiceException e){
log.warn("业务异常", e);
return ApiResult.err(e.getMessage());
}
@ExceptionHandler(BindException.class)
public ApiResult<Void> bindExceptionHandler(BindException e) {
log.warn("业务异常", e);
List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
if (CollectionUtils.isEmpty(allErrors)) {
return ApiResult.err("操作失败 请联系系统管理员");
}
ObjectError objectError = allErrors.get(0);
String objectErrorDefaultMessage = objectError.getDefaultMessage();
return ApiResult.err(objectErrorDefaultMessage);
}
}