Spring Boot 拦截所有异常处理程序

作者:编程家 分类: spring 时间:2025-11-23

使用Spring Boot开发Web应用程序时,我们经常需要处理各种异常情况,例如请求参数错误、数据库连接问题、权限校验失败等等。为了提供更好的用户体验和错误信息展示,我们可以使用拦截器来统一处理这些异常。本文将介绍如何使用Spring Boot来拦截所有异常,并进行相应的处理。

拦截器的作用

拦截器是Spring Boot中用来拦截请求并进行处理的组件。通过拦截器,我们可以在请求到达控制器之前或之后进行一些处理,例如参数校验、日志记录等。在异常处理方面,拦截器可以在发生异常时捕获异常并进行相应的处理,例如返回一个自定义的错误信息。

自定义异常处理器

在Spring Boot中,我们可以通过实现HandlerExceptionResolver接口来自定义异常处理器。该接口定义了一个resolveException()方法,用于处理异常并返回一个ModelAndView对象。

下面是一个简单的自定义异常处理器的示例代码:

java

@Component

public class CustomExceptionHandler implements HandlerExceptionResolver {

@Override

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("message", "发生异常:" + ex.getMessage());

modelAndView.setViewName("error");

return modelAndView;

}

}

在上述代码中,我们实现了HandlerExceptionResolver接口,并重写了resolveException()方法。在方法中,我们可以通过request、response、handler和ex等参数获取到异常信息,并进行相应的处理。在这个示例中,我们将异常信息添加到ModelAndView对象中,并指定了一个名为"error"的视图。

配置异常处理器

要让Spring Boot使用我们自定义的异常处理器,我们需要在配置类中进行相应的配置。在配置类上添加@EnableWebMvc注解,然后重写configureHandlerExceptionResolvers()方法,将自定义的异常处理器添加到异常处理器列表中。

下面是一个简单的配置类的示例代码:

java

@Configuration

@EnableWebMvc

public class WebConfig implements WebMvcConfigurer {

@Autowired

private CustomExceptionHandler customExceptionHandler;

@Override

public void configureHandlerExceptionResolvers(List resolvers) {

resolvers.add(customExceptionHandler);

}

}

在上述代码中,我们使用了@Configuration注解标记这是一个配置类,使用@EnableWebMvc注解开启了Spring MVC的功能。然后,我们通过@Autowired注解将自定义的异常处理器注入到配置类中,并在configureHandlerExceptionResolvers()方法中将其添加到异常处理器列表中。

测试异常处理

现在我们已经配置好了自定义的异常处理器,接下来我们可以进行测试了。在控制器中,我们故意抛出一个自定义的异常,并查看返回的错误信息是否正确。

下面是一个简单的控制器的示例代码:

java

@RestController

public class HelloController {

@GetMapping("/hello")

public String hello() throws CustomException {

throw new CustomException("自定义异常");

}

}

在上述代码中,我们在hello()方法中抛出了一个自定义的异常CustomException。

当我们访问"/hello"接口时,将触发异常,并由自定义的异常处理器进行处理。处理后,我们将得到一个包含错误信息的ModelAndView对象,并返回到名为"error"的视图。

最后,我们可以在视图中展示错误信息,让用户了解发生了什么问题。这样,我们就实现了拦截所有异常,并进行相应处理的功能。

通过拦截器和自定义异常处理器,我们可以在Spring Boot应用程序中统一处理各种异常情况,并提供更好的用户体验和错误信息展示。在本文中,我们介绍了如何使用拦截器来拦截所有异常,并通过自定义异常处理器进行处理。通过配置类的配置和测试代码的示例,我们展示了如何实现这一功能。希望本文对你理解Spring Boot异常处理有所帮助。