增加系统异常、业务异常,区分
系统异常不用写Code 业务异常必须要写。
This commit is contained in:
parent
65e18a90d4
commit
e3aa3d1aca
@ -60,7 +60,9 @@ public class DependencyInjectionPostProcessor implements BeanPostProcessor, Disp
|
|||||||
throw e;
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Unexpected error during dependency injection for bean: {}", beanName, e);
|
log.error("Unexpected error during dependency injection for bean: {}", beanName, e);
|
||||||
throw new DependencyInjectionException(ResponseCode.DEPENDENCY_INJECTION_SERVICE_NOT_FOUND, new Object[] {beanName, e.getMessage()}, e);
|
throw new DependencyInjectionException(
|
||||||
|
String.format("Failed to inject dependencies for bean: %s", beanName),
|
||||||
|
e);
|
||||||
}
|
}
|
||||||
return bean;
|
return bean;
|
||||||
}
|
}
|
||||||
@ -85,7 +87,9 @@ public class DependencyInjectionPostProcessor implements BeanPostProcessor, Disp
|
|||||||
service.getClass().getSimpleName(),
|
service.getClass().getSimpleName(),
|
||||||
controller.getClass().getSimpleName());
|
controller.getClass().getSimpleName());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new DependencyInjectionException(ResponseCode.DEPENDENCY_INJECTION_SERVICE_NOT_FOUND, new Object[] {entityClass.getSimpleName(), e.getMessage()}, e);
|
throw new DependencyInjectionException(
|
||||||
|
String.format("Failed to inject service for controller: %s", controller.getClass().getSimpleName()),
|
||||||
|
e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return controller;
|
return controller;
|
||||||
@ -150,10 +154,8 @@ public class DependencyInjectionPostProcessor implements BeanPostProcessor, Disp
|
|||||||
} catch (DependencyInjectionException e) {
|
} catch (DependencyInjectionException e) {
|
||||||
throw e;
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Unexpected error while injecting dependencies for {}", entityClass.getSimpleName(), e);
|
|
||||||
throw new DependencyInjectionException(
|
throw new DependencyInjectionException(
|
||||||
ResponseCode.DEPENDENCY_INJECTION_SERVICE_NOT_FOUND,
|
String.format("Failed to inject dependencies for service: %s", service.getClass().getSimpleName()),
|
||||||
new Object[] {entityClass.getSimpleName(), e.getMessage()},
|
|
||||||
e);
|
e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,26 @@
|
|||||||
|
package com.qqchen.deploy.backend.framework.exception;
|
||||||
|
|
||||||
|
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public abstract class BaseException extends RuntimeException {
|
||||||
|
|
||||||
|
private final ResponseCode errorCode;
|
||||||
|
|
||||||
|
private final Object[] args;
|
||||||
|
|
||||||
|
protected BaseException(ResponseCode errorCode) {
|
||||||
|
this(errorCode, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected BaseException(ResponseCode errorCode, Object[] args) {
|
||||||
|
this(errorCode, args, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected BaseException(ResponseCode errorCode, Object[] args, Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
this.errorCode = errorCode;
|
||||||
|
this.args = args;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,31 +1,17 @@
|
|||||||
package com.qqchen.deploy.backend.framework.exception;
|
package com.qqchen.deploy.backend.framework.exception;
|
||||||
|
|
||||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
@Getter
|
/**
|
||||||
public class BusinessException extends RuntimeException {
|
* 业务异常,会直接返回给前端具体的错误信息
|
||||||
|
*/
|
||||||
private final ResponseCode errorCode;
|
public class BusinessException extends BaseException {
|
||||||
|
|
||||||
private final Object[] args;
|
|
||||||
|
|
||||||
private Throwable cause;
|
|
||||||
|
|
||||||
public BusinessException(ResponseCode errorCode) {
|
public BusinessException(ResponseCode errorCode) {
|
||||||
this(errorCode, null);
|
super(errorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BusinessException(ResponseCode errorCode, Object[] args) {
|
public BusinessException(ResponseCode errorCode, Object[] args) {
|
||||||
super();
|
super(errorCode, args);
|
||||||
this.errorCode = errorCode;
|
|
||||||
this.args = args;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BusinessException(ResponseCode errorCode, Object[] args, Throwable cause) {
|
|
||||||
super();
|
|
||||||
this.errorCode = errorCode;
|
|
||||||
this.args = args;
|
|
||||||
this.cause = cause;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,21 +1,11 @@
|
|||||||
package com.qqchen.deploy.backend.framework.exception;
|
package com.qqchen.deploy.backend.framework.exception;
|
||||||
|
|
||||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 依赖注入异常
|
* 依赖注入异常,属于系统异常
|
||||||
*/
|
*/
|
||||||
public class DependencyInjectionException extends BusinessException {
|
public class DependencyInjectionException extends SystemException {
|
||||||
|
|
||||||
public DependencyInjectionException(ResponseCode errorCode) {
|
public DependencyInjectionException(String message, Throwable cause) {
|
||||||
super(errorCode);
|
super(message, cause);
|
||||||
}
|
|
||||||
|
|
||||||
public DependencyInjectionException(ResponseCode errorCode, Object[] args) {
|
|
||||||
super(errorCode, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DependencyInjectionException(ResponseCode errorCode, Object[] args, Throwable cause) {
|
|
||||||
super(errorCode, args, cause);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,18 +2,13 @@ package com.qqchen.deploy.backend.framework.exception;
|
|||||||
|
|
||||||
import com.qqchen.deploy.backend.framework.api.Response;
|
import com.qqchen.deploy.backend.framework.api.Response;
|
||||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||||
import jakarta.persistence.OptimisticLockException;
|
|
||||||
import jakarta.persistence.PessimisticLockException;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.MessageSource;
|
import org.springframework.context.MessageSource;
|
||||||
import org.springframework.context.NoSuchMessageException;
|
|
||||||
import org.springframework.context.i18n.LocaleContextHolder;
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
|
|
||||||
import java.util.ConcurrentModificationException;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RestControllerAdvice
|
@RestControllerAdvice
|
||||||
public class GlobalExceptionHandler {
|
public class GlobalExceptionHandler {
|
||||||
@ -21,16 +16,8 @@ public class GlobalExceptionHandler {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MessageSource messageSource;
|
private MessageSource messageSource;
|
||||||
|
|
||||||
private String getMessage(String key) {
|
|
||||||
try {
|
|
||||||
return messageSource.getMessage(key, null, LocaleContextHolder.getLocale());
|
|
||||||
} catch (NoSuchMessageException e) {
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(BusinessException.class)
|
@ExceptionHandler(BusinessException.class)
|
||||||
public Response<?> handleApiException(BusinessException e) {
|
public Response<?> handleBusinessException(BusinessException e) {
|
||||||
String message = messageSource.getMessage(
|
String message = messageSource.getMessage(
|
||||||
e.getErrorCode().getMessageKey(),
|
e.getErrorCode().getMessageKey(),
|
||||||
e.getArgs(),
|
e.getArgs(),
|
||||||
@ -39,27 +26,15 @@ public class GlobalExceptionHandler {
|
|||||||
return Response.error(e.getErrorCode(), message);
|
return Response.error(e.getErrorCode(), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(OptimisticLockException.class)
|
@ExceptionHandler(SystemException.class)
|
||||||
public Response<Void> handleOptimisticLockException(OptimisticLockException ex) {
|
public Response<?> handleSystemException(SystemException e) {
|
||||||
log.warn("Optimistic lock exception", ex);
|
log.error("System error occurred", e);
|
||||||
return Response.error(ResponseCode.OPTIMISTIC_LOCK_ERROR, getMessage("system.optimistic.lock.error"));
|
return Response.error(ResponseCode.ERROR);
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(PessimisticLockException.class)
|
|
||||||
public Response<Void> handlePessimisticLockException(PessimisticLockException ex) {
|
|
||||||
log.warn("Pessimistic lock exception", ex);
|
|
||||||
return Response.error(ResponseCode.PESSIMISTIC_LOCK_ERROR, getMessage("system.pessimistic.lock.error"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(ConcurrentModificationException.class)
|
|
||||||
public Response<Void> handleConcurrentModificationException(ConcurrentModificationException ex) {
|
|
||||||
log.warn("Concurrent modification exception", ex);
|
|
||||||
return Response.error(ResponseCode.CONCURRENT_UPDATE_ERROR, getMessage("system.concurrent.update.error"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(Exception.class)
|
@ExceptionHandler(Exception.class)
|
||||||
public Response<?> handleException(Exception e) {
|
public Response<?> handleException(Exception e) {
|
||||||
log.error("系统错误", e);
|
log.error("Unexpected error occurred", e);
|
||||||
return Response.error(ResponseCode.ERROR);
|
return Response.error(ResponseCode.ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
package com.qqchen.deploy.backend.framework.exception;
|
||||||
|
|
||||||
|
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统异常,只返回系统错误给前端,但会记录详细日志
|
||||||
|
*/
|
||||||
|
public class SystemException extends BaseException {
|
||||||
|
|
||||||
|
public SystemException(String message, Throwable cause) {
|
||||||
|
super(ResponseCode.ERROR, new Object[] {message}, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SystemException(ResponseCode errorCode, Object[] args, Throwable cause) {
|
||||||
|
super(errorCode, args, cause);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user