穀粒商城學習——P68統一異常處理

代碼:

去掉@Valid後的BindingResult

    @RequestMapping("/save")
   // @RequiresPermissions("product:brand:save")
    public R save(@Valid @RequestBody BrandEntity brand){

        brandService.save(brand);

        return R.ok();
    }
View Code

異常處理類處理BindingResult及返回結果

package com.atguigu.gulimall.product.exception;

import com.atguigu.common.exception.BizCodeEnume;
import com.atguigu.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;

/**
 * @Description:
 * @Author: zyn
 * @Date: 2021-6-30
 */
/**
 * 集中處理所有異常
 */
@Slf4j
@RestControllerAdvice
public class GulimallExceptionControllerAdvice {
    @ExceptionHandler(value = MethodArgumentNotValidException.class)//指定處理的異常類型
    public R handleValidException(MethodArgumentNotValidException e){
        log.error("數據校驗出現問題{},異常類型{}",e.getMessage(),e.getClass());
        BindingResult result=e.getBindingResult();
        Map<String,String> map = new HashMap<>();
        result.getFieldErrors().forEach(x->{
            map.put(x.getField(),x.getDefaultMessage());
        });
        return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data",map);
    }
    @ExceptionHandler(value = Throwable.class)//其他公共異常,優先級小於指定異常
    public R handleException(Throwable e){
        return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg());
    }
}
View Code

全局錯誤碼定義規範開發

package com.atguigu.common.exception;

/**
 * @Description:
 * @Author: zyn
 * @Date: 2021-6-30
 */
/***
 * 錯誤碼和錯誤信息定義類
 * 1. 錯誤碼定義規則爲5爲數字
 * 2. 前兩位表示業務場景,最後三位表示錯誤碼。例如:100001。10:通用 001:系統未知異常
 * 3. 維護錯誤碼後需要維護錯誤描述,將他們定義爲枚舉形式
 * 錯誤碼列表:
 *  10: 通用
 *      001:參數格式校驗
 *  11: 商品
 *  12: 訂單
 *  13: 購物車
 *  14: 物流
 */
public enum BizCodeEnume {
    UNKNOW_EXCEPTION(10000,"系統未知異常"),
    VAILD_EXCEPTION(10001,"參數格式校驗失敗");

    private int code;
    private String msg;
    BizCodeEnume(int code,String msg){
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}
View Code

測試效果:

 

 

代碼裏有寫了註釋,貌似沒什麼要說的了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章