|
|
|
@ -14,20 +14,29 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
|
|
* @CONTACT 317758022@qq.com
|
|
|
|
|
* @DESC 全局异常处理
|
|
|
|
|
*/
|
|
|
|
|
// 使用Spring框架的@ControllerAdvice注解,表明这个类是一个全局的异常处理类,它可以拦截并处理在整个应用中由Spring管理的控制器(Controller)抛出的异常,能够统一对异常情况进行处理,避免在每个控制器方法中都单独编写异常处理逻辑,使代码更加简洁和易于维护。
|
|
|
|
|
@ControllerAdvice
|
|
|
|
|
// 使用@ResponseBody注解,结合@ControllerAdvice注解,意味着这个类中处理异常的方法返回的结果会直接作为响应体(ResponseBody)返回给客户端,通常是以JSON等格式的数据进行响应,方便客户端获取异常相关的信息并进行相应展示或处理。
|
|
|
|
|
@ResponseBody
|
|
|
|
|
// 使用lombok的@Slf4j注解,用于自动生成日志相关的代码,方便在类中记录各种异常相关的日志信息,便于后续查看异常情况以及进行问题排查,比如记录异常的详细信息、错误消息等,有助于定位和解决出现的问题。
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class ExceptionHandlerAdvice {
|
|
|
|
|
// 使用Spring的@ExceptionHandler注解,指定这个方法用于处理Exception类型的异常,也就是可以捕获所有未被更具体的异常处理器处理的异常情况,它是一种兜底的异常处理方式,确保任何未被处理的异常都能在这里被统一处理,避免程序因异常而崩溃。
|
|
|
|
|
@ExceptionHandler(Exception.class)
|
|
|
|
|
public ServerResponse handleException(Exception e){
|
|
|
|
|
// 使用日志记录异常的详细信息,通过log.error方法记录异常的消息内容(e.getMessage())以及完整的异常堆栈信息(e),方便后续查看具体的异常原因和出现异常的位置等情况,有助于进行问题排查和定位。
|
|
|
|
|
log.error(e.getMessage(),e);
|
|
|
|
|
// 创建并返回一个ServerResponse类型的响应对象,调用ServerResponse的静态方法createByErrorCodeMessage,传入自定义的系统内部错误状态码(Constants.RESP_STATUS_INTERNAL_ERROR,通常表示服务器内部出现了问题)以及提示客户端的消息("系统异常,请稍后再试"),告知客户端请求处理出现了系统级别的异常,让客户端可以根据这个提示信息进行相应的操作,比如提示用户稍后重新发起请求等。
|
|
|
|
|
return ServerResponse.createByErrorCodeMessage(Constants.RESP_STATUS_INTERNAL_ERROR,"系统异常,请稍后再试");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 使用@ExceptionHandler注解,指定这个方法用于处理SnailmallException类型的异常,这是一个自定义的异常类型,意味着当应用中抛出了这个特定类型的异常时,会由这个方法来进行专门的处理,相较于处理通用Exception类型的异常,这里可以根据自定义异常的特点进行更针对性的响应处理。
|
|
|
|
|
@ExceptionHandler(SnailmallException.class)
|
|
|
|
|
public ServerResponse handleException(SnailmallException e){
|
|
|
|
|
// 同样记录异常的详细信息到日志中,方便后续排查问题,记录异常的消息内容以及完整的异常堆栈信息。
|
|
|
|
|
log.error(e.getMessage(),e);
|
|
|
|
|
// 创建并返回一个ServerResponse类型的响应对象,调用ServerResponse的静态方法createByErrorCodeMessage,传入自定义异常中携带的状态码(e.getExceptionStatus(),通常自定义异常会根据不同的业务场景设置不同的状态码来表示具体的错误情况)以及异常的消息内容(e.getMessage()),这样可以将更具体的错误信息和对应的状态码返回给客户端,让客户端能够准确知晓出现的具体问题并进行相应处理。
|
|
|
|
|
return ServerResponse.createByErrorCodeMessage(e.getExceptionStatus(),e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|