1. 两种异常处理机制
1.1 使用 throw 关键字手动抛出异常
使用
throw关键字抛出异常,代码会的显得简单明了
如下图所示
 
1.2 使用 try-catch 捕获异常
使用
try-catch进行捕获异常,往往会使代码变得更加笼统,层层包裹
如下图所示
 
2. 自定义异常处理
我们可以使用我们自定义的异常处理,用于解决我们所设定的异常
import lombok.Data;
/**
 * 自定义异常
 */
@Data
public class XueChengPlusException extends RuntimeException{
    private String errMessage;
    public XueChengPlusException() {
    }
    public XueChengPlusException(String message) {
        this.errMessage = message;
    }
    public static void cast(String message){
        throw new XueChengPlusException(message);
    }
    public static void cast(CommonError error){
        throw new XueChengPlusException(error.getErrMessage());
    }
}
3. 异常返回前端信息model
由于我们往往需要前后端联调的时候,寻要获取异常处理的信息,使其显示在前端页面,显示给用户
import java.io.Serializable;
/**
 * 错误响应参数包装,异常信息模型
 */
public class RestErrorResponse implements Serializable {
    private final String errMessage;
    public RestErrorResponse(String errMessage) {
        this.errMessage = errMessage;
    }
    public String getErrMessage() {
        return errMessage;
    }
}
4. 通用异常信息
从上文来看,我们自定义异常继承的是RuntimeException,但如果是出现其他类型的异常,例如Exception…,我们需要定义一个通用异常处理
/**
 * @description 通用错误信息
 */
public enum CommonError {
	UNKOWN_ERROR("执行过程异常,请重试。"),
	PARAMS_ERROR("非法参数"),
	OBJECT_NULL("对象为空"),
	QUERY_NULL("查询结果为空"),
	REQUEST_NULL("请求参数为空");
	private String errMessage;
	public String getErrMessage() {
		return errMessage;
	}
	private CommonError( String errMessage) {
		this.errMessage = errMessage;
	}
}
5. 全局异常处理
这是一个异常处理机器,用于处理各种异常,然后返回给前端一个异常信息
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 针对自定义异常进行处理
     * @param e
     * @return
     */
    @ExceptionHandler(XueChengPlusException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public RestErrorResponse customException(XueChengPlusException e){
        //记录异常
        log.error("系统异常{}",e.getErrMessage(),e);
        //解析出异常信息
        String errMessage = e.getErrMessage();
        RestErrorResponse restErrorResponse = new RestErrorResponse(errMessage);
        return restErrorResponse;
    }
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public RestErrorResponse customException(Exception e){
        //记录异常
        log.error("系统异常{}",e.getMessage(),e);
        //解析出异常信息
        RestErrorResponse restErrorResponse = new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
        return restErrorResponse;
    }
}


















