1.創(chuàng)建一個全局異常處理類
2.添加注解RestControllerAdvice 這個是直接返回一個json格式的
3.在處理方法上添加ExceptionHandler表明是對那個異常進行處理的
4.在處理方法中編寫業(yè)務(wù)邏輯
注意: 這里的R是一個返回給前臺的數(shù)據(jù)的類噪生;BizCodeEnum是一個業(yè)務(wù)編碼的狀態(tài)碼卖词,第一個處理異常的方法是對JRS303校驗的異常處理
package com.yuchen.yuchenmail.mailproduct.exception;
import com.yuchen.common.exception.BizCodeEnum;
import com.yuchen.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.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@RestControllerAdvice(basePackages ="com.yuchen.yuchenmail.mailproduct.controller")
public class GlobalExceptionControllerAdvice {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public R handleVaildException(MethodArgumentNotValidException e){
log.info(e.toString());
BindingResult bindingResult = e.getBindingResult();
Map? errorMap =new HashMap<>();
bindingResult.getFieldErrors().forEach((fieldError) -> {
errorMap.put(fieldError.getField(), fieldError.getDefaultMessage());
});
return R.error(BizCodeEnum.VAILD_EXCEPTION.getCode(),BizCodeEnum.VAILD_EXCEPTION.getMsg()).put("data",errorMap);
}
@ExceptionHandler(value = Throwable.class)
public R defaultHandleException(Throwable t){
return R.error(BizCodeEnum.UNKNOW_EXCEPTION.getCode(),BizCodeEnum.UNKNOW_EXCEPTION.getMsg());
}
}