diff --git a/snailmall-shipping-service/src/main/java/com/njupt/swg/common/exception/ExceptionHandlerAdvice.java b/snailmall-shipping-service/src/main/java/com/njupt/swg/common/exception/ExceptionHandlerAdvice.java index cef87ac..44e2c30 100644 --- a/snailmall-shipping-service/src/main/java/com/njupt/swg/common/exception/ExceptionHandlerAdvice.java +++ b/snailmall-shipping-service/src/main/java/com/njupt/swg/common/exception/ExceptionHandlerAdvice.java @@ -14,19 +14,33 @@ import org.springframework.web.bind.annotation.ResponseBody; * @CONTACT 317758022@qq.com * @DESC 全局异常处理 */ +// @ControllerAdvice注解用于定义全局的异常处理类,它可以对多个Controller中的异常进行统一处理,增强了代码的健壮性和异常处理的集中性。 @ControllerAdvice +// @ResponseBody注解表示该类中处理异常的方法返回的结果会直接写入HTTP响应的正文(比如以JSON格式等),而不是去寻找视图进行解析渲染。 @ResponseBody +// 使用lombok的@Slf4j注解,自动生成日志相关代码,方便在类中记录异常相关的详细信息,便于后续排查问题。 @Slf4j public class ExceptionHandlerAdvice { + + // @ExceptionHandler注解用于指定该方法处理的异常类型,这里表示这个方法会处理所有继承自Exception类的异常(也就是几乎所有的异常情况)。 + // 当捕获到Exception类型的异常时,会进入这个方法进行处理。 @ExceptionHandler(Exception.class) public ServerResponse handleException(Exception e){ + // 使用日志记录异常的详细信息,包括异常消息和异常堆栈信息,方便开发人员定位问题所在。 log.error(e.getMessage(),e); + // 通过ServerResponse的静态方法创建一个包含错误信息的响应对象,使用了Constants类中定义的表示服务器内部错误的状态码(RESP_STATUS_INTERNAL_ERROR), + // 并设置相应的错误提示消息,告知客户端系统出现异常,让其稍后再试,最后将这个响应对象返回,客户端将会收到对应的错误响应信息。 return ServerResponse.createByErrorCodeMessage(Constants.RESP_STATUS_INTERNAL_ERROR,"系统异常,请稍后再试"); } + // 同样使用@ExceptionHandler注解,不过这里指定处理的是SnailmallException类型的异常,这应该是项目自定义的一种异常类型。 + // 当出现这种特定的异常时,会执行这个方法来进行针对性处理。 @ExceptionHandler(SnailmallException.class) public ServerResponse handleException(SnailmallException e){ + // 记录该自定义异常的详细信息到日志中,方便后续查看异常出现的原因等情况。 log.error(e.getMessage(),e); + // 通过ServerResponse的静态方法创建响应对象,使用自定义异常中携带的状态码(通过e.getExceptionStatus()获取)以及异常消息(e.getMessage())来构建响应, + // 然后将这个响应返回给客户端,以便客户端根据具体的状态码和消息进行相应处理。 return ServerResponse.createByErrorCodeMessage(e.getExceptionStatus(),e.getMessage()); }