Java全局异常捕获

1.定义返回类

package com.eternalray.common;

import lombok.Data;

/**
 * @Author: Eternalray
 * 返回结果集公用方法
 */
@Data
public class Result<T> {
    /**
     *  success 是否成功返回结果 成功true 失败false
     */
    private boolean success;
    /**
     *  data 返回的结果数据
     */
    private T data;

    public static <T> Result<T> set(boolean success,T data){
        Result<T> result=new Result<>();
        result.setSuccess(success);
        result.setData(data);
        return  result;
    }
}

2.定义异常类

package com.eternalray.conf;

import com.eternalray.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.lang.reflect.UndeclaredThrowableException;

/**
 * 全局异常处理配置
 * @author EternalRay
 */
@ControllerAdvice
@ResponseBody
@Slf4j
public class GlobalExceptionHandleConf {

    /**
     * 顶级异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    public Object handlerException(Exception e){
        //annotation抛出的异常
        if(e instanceof UndeclaredThrowableException) {
            e = (Exception) ((UndeclaredThrowableException)e).getUndeclaredThrowable();
        }
        log.error("[handleException]: ",e);
        return Result.set(false,e.getMessage());
    }
}

 

### Java 中用于全局异常捕捉的框架 在Java应用程序中,尤其是基于Spring Boot的应用程序,`@ControllerAdvice` 和 `@ExceptionHandler` 是两个非常重要的注解,它们共同作用来实现全局异常处理机制。通过这种方式可以集中管理整个应用中的异常处理逻辑。 当发生未被捕获的异常时,这些异常会被传递给由 `@ControllerAdvice` 注解修饰的类,并且该类内部定义的方法如果带有 `@ExceptionHandler` 注解,则会匹配特定类型的异常并执行相应的响应逻辑[^1]。 下面是一个简单的例子展示如何配置一个全局异常处理器: ```java import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(GlobalException.class) public ResponseEntity<String> handleCustomException(GlobalException ex) { return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } ``` 在这个例子中,每当抛出了 `GlobalException` 类型的异常时,就会触发 `handleCustomException()` 方法,它将创建一个新的HTTP响应实体对象,其中包含了错误消息以及状态码500表示服务器端发生了内部错误[^2]。 对于更复杂的场景,还可以自定义异常类继承于 RuntimeException 或其他基础异常类,在此基础上添加更多属性比如错误代码等信息以便更好地描述具体的业务逻辑错误。此外也可以扩展此模式以支持JSON格式化的API响应体,从而满足现代Web服务的需求[^3]。 #### 创建自定义异常类 为了使异常更加具体化和易于理解,通常建议开发者为不同的业务需求设计专门的异常类型。这里给出一个简单版本的自定义异常类作为示范: ```java public class GlobalException extends RuntimeException{ private static final long serialVersionUID = 1L; public GlobalException(String message){ super(message); } } ``` 以上就是关于Spring Boot下实现全局异常处理的一个基本介绍及其实现方式的例子说明。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值