自定义统一异常拦截
项目中异常拦截
package pyf.smilemall.common.exception;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import pyf.smilemall.common.Myenum.BizCodeEnum;
import pyf.smilemall.common.utils.R;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author pengyifeng
* @version 2.0
* @ClassName SmolemallExceptionHandler.java
* @Description 统一异常处理类
* @createTime 2021年09月01日 11:23:00
*/
@Slf4j
@RestControllerAdvice
public class SmilemallExceptionHandler {
/**
* 捕获valid异常
* @param exception
* @return
*/
@ExceptionHandler(value = Exception.class)
public R handleValidException(MethodArgumentNotValidException exception){
Map msgMap=new HashMap<>();
BindingResult bindingResult = exception.getBindingResult();
List fieldErrors = bindingResult.getFieldErrors();
fieldErrors.forEach(fieldError -> {
//获取属性
String field = fieldError.getField();
//获取异常信息
String defaultMessage = fieldError.getDefaultMessage();
msgMap.put(field,defaultMessage);
});
return R.error(BizCodeEnum.VALID_EXCEPTION.getCode(),BizCodeEnum.VALID_EXCEPTION.getMsg()).put("data",msgMap);
}
/**
* 默认处理异常
* @param throwable
* @return
*/
@ExceptionHandler(value = Throwable.class)
public R handleException(Throwable throwable){
log.error("未知异常{},异常类型{}",throwable.getMessage(),throwable.getClass());
return R.error(BizCodeEnum.UNKNOW_EXEPTION.getCode(),BizCodeEnum.UNKNOW_EXEPTION.getMsg());
}
}
自定义处理枚举类
package pyf.smilemall.common.Myenum;
/**
* @author pengyifeng
* @version 2.0
* @ClassName BizCodeEnum.java
* @Description 异常类型枚举类
* @createTime 2021年09月01日 11:36:00
*/
/***
* 错误码和错误信息定义类
* 1. 错误码定义规则为5为数字
* 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通用 001:系统未知异常
* 3. 维护错误码后需要维护错误描述,将他们定义为枚举形式
* 错误码列表:
* 10: 通用
* 001:参数格式校验
* 11: 商品
* 12: 订单
* 13: 购物车
* 14: 物流
*/
public enum BizCodeEnum {
UNKNOW_EXEPTION(10000,"系统未知异常"),
VALID_EXCEPTION( 10001,"参数格式校验失败");
private Integer code;
private String msg;
BizCodeEnum(Integer code,String msg){
this.code=code;
this.msg=msg;
}
public Integer getCode(){
return code;
}
public String getMsg(){
return msg;
}
}
PS:我是放在公共包中,其他微服务进行引用,需要在扫包的时候进行扫描
在需要应用的项目中进行扫描
package pyf.smilemall.product;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = {"pyf.smilemall"})
public class SmilemallProductApplication {
public static void main(String[] args) {
SpringApplication.run(SmilemallProductApplication.class, args);
}
}