异常处理源码
# 异常处理源码
```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)