异常处理源码

# 异常处理源码 ```java package com.junjie.bitmall.product.exception; import com.junjie.bitmall.common.exception.enumeration.ErrorCodeEnum; import com.junjie.bitmall.common.utils.R; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.HashMap; import java.util.Map; /** * @className: com.junjie.bitmall.product.exception.ProductExceptionAdvice * @description: * @author: 江骏杰 * @create: 2023-07-09 20:17 */ @RestControllerAdvice(basePackages = "com.junjie.bitmall.product") @Slf4j public class ProductExceptionAdvice { /** * product微服务校验异常的统一处理 * @param validException 校验异常 * @return R */ @ExceptionHandler(MethodArgumentNotValidException.class) public R invalidHandler(MethodArgumentNotValidException validException) { log.error("校验错误: {}", validException.getMessage()); // 输出异常原因, 非常关键 // log.error("未知错误原因: {}", validException.getCause().toString()); // 获取绑定结果, 这里面有异常相关的信息, 即校验相关错误的原因 BindingResult bindingResult = validException.getBindingResult(); // 创建一个集合 Map<String, String> errorMap = new HashMap<>(); // 遍历绑定结果, 将所有的字段及其对应的原因注入集合中 bindingResult.getFieldErrors().forEach(fieldError -> errorMap.put(fieldError.getField(), fieldError.getDefaultMessage())); // 封装到R对象中, 并返回 return R.error(ErrorCodeEnum.INVALID_ERROR.getCode(), ErrorCodeEnum.INVALID_ERROR.getMessage()) .put("data", errorMap); } /** * 处理通用的异常 * @param exception 未知异常??? * @return R */ @ExceptionHandler(Exception.class) public R commonHandler(Exception exception) { log.error("未知错误信息: {}", exception.getMessage()); // log.error("未知错误原因: {}", exception.getCause().toString()); log.error("异常: {}", exception.getClass()); return R.error(ErrorCodeEnum.UNDEFINE_ERROR.getCode(), ErrorCodeEnum.UNDEFINE_ERROR.getMessage()) .put("data", exception.getMessage()); } } ``` [错误码枚举](doc:8HX8yRTz)