抛出自定义异常

1.自定义异常

java 复制代码
@Getter
public class ServiceImplException extends RuntimeException {

    private ResultCode resultCode;

    public ServiceImplException(ResultCode resultCode) {
        this.resultCode = resultCode;
    }
}

ResultCode是一个枚举类,用来枚举出现的状态码和异常信息。

java 复制代码
@AllArgsConstructor
@Getter
public enum ResultCode {
    /** 定义状态码 */
    //操作成功
    SUCCESS                     (1000, "操作成功"),

    //服务器内部错误,友好提示
    ERROR                       (2000, "服务繁忙请稍后重试")
}

2.定义全局异常处理

实现代码:

java 复制代码
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler<T> {
    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public Result<?>
    handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
                                        HttpServletRequest request)
    {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}',不⽀持'{}'请求", requestURI, e.getMethod());
        return Result.failed(ResultCode.FAILED_USER_NOT_EXISTS);
    }
    /**
     * 拦截运⾏时异常
     */
    @ExceptionHandler(RuntimeException.class)
    public Result<?> handleRuntimeException(RuntimeException e, HttpServletRequest
            request) {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}',发⽣异常.", requestURI, e);
        return Result.failed(ResultCode.ERROR);
    }

    /**
     * 捕获service层的异常
     * @param e
     * @param request
     * @return
     */
    @ExceptionHandler(ServiceImplException.class)
    public Result<?> ServiceImplException(ServiceImplException e, HttpServletRequest request) {
        String requestURI = request.getRequestURI();
        ResultCode resultCode = e.getResultCode();
        log.error("请求地址'{}',发生业务异常.", requestURI, resultCode.getMsg(),e);
        return Result.failed(resultCode);
    }
    /**
     * 系统异常
     */
    @ExceptionHandler(Exception.class)
    public Result<?> handleException(Exception e, HttpServletRequest request) {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}',发⽣异常.", requestURI, e);
        return Result.failed (ResultCode. ERROR );
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result<?> handleBindException(Exception e, HttpServletRequest request) {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}',发⽣异常.", requestURI, e);
        return Result.failed (ResultCode.ERROR_FORMAT );
    }
}

注意两点:

一是需要在类上@RestControllerAdvice加上注解。

二是需要在相应的方法上加上@ExceptionHandler注解,后面跟上处理相应的异常。

最终达到的效果就是我们在服务层抛出相应的异常之后,这里会自动捕捉抛出的异常,但是抛出的异常必须是这里实现相应的逻辑的异常。

相关推荐
virus59452 小时前
悟空CRM mybatis-3.5.3-mapper.dtd错误解决方案
java·开发语言·mybatis
没差c3 小时前
springboot集成flyway
java·spring boot·后端
时艰.3 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
编程彩机3 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂
笨蛋不要掉眼泪3 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
Yvonne爱编码4 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
像少年啦飞驰点、5 小时前
零基础入门 Spring Boot:从“Hello World”到可上线微服务的完整学习指南
java·spring boot·微服务·编程入门·后端开发
眼眸流转5 小时前
Java代码变更影响分析(一)
java·开发语言
Yvonne爱编码5 小时前
JAVA数据结构 DAY4-ArrayList
java·开发语言·数据结构
阿猿收手吧!5 小时前
【C++】C++原子操作:compare_exchange_weak详解
java·jvm·c++