如何在Java Controller全局捕获异常

1. 概述

在Java开发中,Controller层是处理业务逻辑的关键部分。当处理请求时可能会出现异常,为了统一处理这些异常并返回友好的错误信息,我们需要实现全局异常处理机制。本文将详细介绍如何在Java Controller中全局捕获异常。

2. 流程概览

下面是实现全局异常处理的流程概览,我们将通过一步步的操作来完成这个任务。

gantt
    title 全局异常处理流程
    section 实现步骤
    定义异常处理类          :done, a1, 2022-01-01, 1d
    编写异常处理方法        :done, a2, after a1, 2d
    在Controller中引用异常处理类  :done, a3, after a2, 1d

3. 具体步骤

下面将具体介绍每一步所需的操作。

3.1 定义异常处理类

首先,我们需要定义一个全局异常处理类,用于捕获Controller层抛出的异常。创建一个名为GlobalExceptionHandler的类,代码如下:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Map<String, Object> handleException(Exception e) {
        Map<String, Object> result = new HashMap<>();
        result.put("code", 500);
        result.put("message", e.getMessage());
        return result;
    }
}

上面的代码中,我们使用@ControllerAdvice注解标识这是一个全局异常处理类,并使用@ExceptionHandler注解标识要处理的异常类型为Exception。在handleException方法中,我们可以根据实际情况自定义返回的错误信息。

3.2 编写异常处理方法

接下来,我们需要在Controller中抛出异常,以便测试全局异常处理是否生效。在Controller中编写一个抛出异常的方法,代码如下:

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        throw new RuntimeException("出现异常啦!");
    }
}

3.3 在Controller中引用异常处理类

最后一步,我们需要在Controller中引用GlobalExceptionHandler类,代码如下:

@RestController
public class TestController {

    @Autowired
    private GlobalExceptionHandler globalExceptionHandler;

    @GetMapping("/test")
    public String test() {
        throw new RuntimeException("出现异常啦!");
    }
}

至此,我们已经完成了全局异常处理的实现。当test方法中抛出异常时,GlobalExceptionHandler类会捕获该异常并返回自定义的错误信息。

结论

通过本文的介绍,你已经学会了如何在Java Controller中实现全局异常处理。这种方法可以帮助你统一处理异常并返回友好的错误信息,提升用户体验和系统稳定性。希望本文对你有所帮助!