package com.msb.common.exception;
import com.msb.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;
/**
* @author lcc
* @version V1.0
* @Package com.msb.mall.mall_pms.exception
* @date 2022/5/20 15:05
*/
@Slf4j
@RestControllerAdvice(basePackages = "com.msb.mall.mall_pms.controller")
public class ExceptionControllerAdvice {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public R handlerValidException(MethodArgumentNotValidException e) {
log.error("数据校验出现问题:{},异常类型:{}", e.getMessage(), e.getClass());
/*处理验证异常方法*/
BindingResult bindingResult = e.getBindingResult();
HashMap<String, String> hashMap = new HashMap<>();
StringBuffer stringBuffer = new StringBuffer();
bindingResult.getFieldErrors().forEach(fieldError -> {
hashMap.put(fieldError.getField(), fieldError.getDefaultMessage());
});
// return R.error(400,"提交的数据不合法").put("data", hashMap);
return R.error(BizCodeEnum.VALID_EXCEPTION.getCode(), BizCodeEnum.VALID_EXCEPTION.getMsg())
.put("data", hashMap);
}
/*系统其他异常处理*/
@ExceptionHandler(value = Throwable.class)
public R handlerException(Throwable e) {
log.error("错误信息", e);
// return R.error(400,"位置异常信息").put("data", e.getLocalizedMessage());
return R.error(BizCodeEnum.UNKNOWN_EXCEPTION.getCode(), BizCodeEnum.UNKNOWN_EXCEPTION.getMsg())
.put("data", e.getMessage());
}
}
@AllArgsConstructor
@NoArgsConstructor
public enum BizCodeEnum {
/*10 通用
11 商品
12 订单
13 购物车
14 物流
15 会员
* */
UNKNOWN_EXCEPTION(10000, "系统位置异常"),
VALID_EXCEPTION(10001, "参数格式异常"),
VALID_SMS_EXCEPTION(10002, "短信发送频率太高,请稍等一会发送!"),
USERNAME_EXSIT_EXCEPTION(15001, "用户名存在!"),
PHONE_EXSIT_EXCEPTION(15002, "手机号存在!"),
USERNAME_OR_PHONE_VALID_EXCEPTION(15003, "账号或者密码错误!"),
NO_STOCK_EXCEPTION(14001, "商品锁定库存异常!"),
PRODUCT_UP_EXCEPTION(11001, "商品上架异常");
private int code;
private String msg;
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}