首页 > 其他分享 >截取Spring框架自动抛出异常

截取Spring框架自动抛出异常

时间:2024-05-15 17:53:18浏览次数:13  
标签:Spring 截取 springframework ex ResponseEntity 抛出 org 异常

在Spring框架中,特别是使用Spring MVC或Spring Boot时,可以采用以下几种方式来截取和处理框架自动抛出的异常,使其更加符合应用的需求和提升用户体验:

1. 全局异常处理器 - @ControllerAdvice

使用@ControllerAdvice注解定义一个全局异常处理类,可以捕获整个应用程序中控制器抛出的异常。

示例代码:

Java
1import org.springframework.http.ResponseEntity;
2import org.springframework.web.bind.annotation.ControllerAdvice;
3import org.springframework.web.bind.annotation.ExceptionHandler;
4import org.springframework.web.client.HttpClientErrorException;
5
6@ControllerAdvice
7public class GlobalExceptionHandler {
8
9    @ExceptionHandler(value = {HttpClientErrorException.class})
10    public ResponseEntity<String> handleHttpClientErrorException(HttpClientErrorException e) {
11        // 处理特定异常,例如HttpClientErrorException
12        return ResponseEntity.status(e.getStatusCode()).body("发生错误:" + e.getMessage());
13    }
14
15    @ExceptionHandler(value = {Exception.class})
16    public ResponseEntity<String> handleGeneralException(Exception e) {
17        // 处理其他未被捕获的异常
18        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器内部错误:" + e.getMessage());
19    }
20}

2. 实现 HandlerExceptionResolver

实现HandlerExceptionResolver接口,可以对所有控制器方法抛出的异常进行处理。

示例代码:

Java
1import org.springframework.web.servlet.HandlerExceptionResolver;
2import org.springframework.web.servlet.ModelAndView;
3
4public class CustomExceptionResolver implements HandlerExceptionResolver {
5
6    @Override
7    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
8        // 根据异常类型自定义处理逻辑
9        if (ex instanceof NullPointerException) {
10            // 处理NullPointerException
11        } else if (ex instanceof IllegalArgumentException) {
12            // 处理IllegalArgumentException
13        } else {
14            // 默认处理逻辑
15        }
16        // 返回ModelAndView以控制视图和模型数据
17    }
18}

别忘了将自定义的异常解析器添加到Spring的配置中。

3. 使用AOP(面向切面编程)

通过AOP可以拦截方法调用,捕获并处理异常。

示例代码:

Java
1import org.aspectj.lang.annotation.Aspect;
2import org.aspectj.lang.annotation.AfterThrowing;
3import org.springframework.stereotype.Component;
4
5@Aspect
6@Component
7public class ExceptionHandlingAspect {
8
9    @AfterThrowing(pointcut = "execution(* com.yourpackage.controller.*.*(..))", throwing = "ex")
10    public void handleControllerExceptions(Exception ex) {
11        // 在这里处理控制器抛出的异常
12    }
13}

4. 在具体Controller中使用@ExceptionHandler

直接在控制器类中使用@ExceptionHandler注解,处理该控制器内抛出的特定异常。

示例代码:

Java
1@RestController
2public class MyController {
3
4    @ExceptionHandler(value = ResourceNotFoundException.class)
5    public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
6        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
7    }
8
9    // ...其他方法
10}

通过这些方式,你可以有效地截取并定制Spring框架自动抛出的异常处理逻辑,提供更友好的错误反馈和提升应用的健壮性。

标签:Spring,截取,springframework,ex,ResponseEntity,抛出,org,异常
From: https://www.cnblogs.com/anenyang/p/18194397

相关文章

  • SpringContextUtils
    @ComponentpublicclassSpringContextUtilsimplementsApplicationContextAware,EnvironmentAware{privatestaticApplicationContextapplicationContext;privatestaticEnvironmentenvironment;@OverridepublicvoidsetApplicationContext(......
  • 初始spring boot
    什么是springboot?SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建、运行、调试、部署等。使用SpringBoot可以做到专注于Spring应用的开发,而无需过多关注XML的配置,SpringBoot使用“约定优于配置”的理念。SpringBoot的核心功能可......
  • Spring源码分析:List集合注入
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://ma......
  • 后端跨域cookie问题与spring-session-data-redis
    背景1、后端统一接入了公司内部登录系统,登录后cookie信息在域名:test.net.cn下。Set-Cookie:SESSION=09a2f617-66a0-4e02-b99f-130d83900321;Domain=test.net.cn;Path=/;HttpOnly;SameSite=Lax2、当我们的系统接入到统一登录系统后,若访问域名为a.test.net.cn,则不会出现问题,因......
  • SpringBoot SpringCloud Spring Cloud Alibaba 版本对应关系
    最近公司的项目扫描出一些安全漏洞,于是让我给项目中的依赖升下级。有部分涉及到SpringBoot和SpringCloud,因此要考虑到兼容性,特此记录下查询各版本之间对应关系的方法。靠谱的方法还是要从官网得到,参考文章:工具篇--SpringBoot与SpringCloud的版本对应关系&SpringBoot与JDK对应关系......
  • springboot国际化的使用(一_验证OK
    https://blog.csdn.net/weixin_39960529/article/details/86571962 步骤:1.首先建立一个meven项目2.在pom.xml中加如下依赖:<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-thymeleaf</artifactI......
  • SpringBoot中使用MessageSource的getMessage获取i18n资源文件中的消息_OK
    https://www.cnblogs.com/badaoliumangqizhi/p/13608623.html 场景springboot默认就支持国际化的,而且不需要你过多的做什么配置,只需要在resources/下创建国际化配置文件即可,注意名称必须以messages开始。messages.properties(默认的语言配置文件,当找不到其他语言的配置的时候......
  • 【JavaWeb】前后端分离SpringBoot项目快速排错指南
    1发起业务请求打开浏览器开发者工具,同时显示网络(Internet)和控制台(console)接着,清空控制台和网络的内容,如下图然后,点击你的业务按钮,发起请求。首先看控制台有没有报错信息,这是最直观的,看不懂英文就去翻译一下,百度一下如果控制台的信息并没有什么价值,或者指明是后端的问题,那么......
  • Java-SSM-Day02 SpringFramework实战指南
    一、技术体系结构总体技术体系1单一架构:一个项目,一个工程,导出为一个war包,在一个Tomcat上运行。也叫allinone。目前主要应用技术框架为:Spring、SpringMVC、Mybatis分布式架构:一个项目(对应IDEA中的一个project),拆分成很多......
  • IDEA社区版(IDEA Community Edition)创建Springboot父子项目
    1.因为社区办不支持使用springSpringInitializr的方式创建项目,但是我们可以考虑使用别的方式达到效果:创建方式有3种:第一种:使用https://start.spring.io/官方URL创建项目,再导入到IDEACommunityEdition(后面简称:ideaC)。具体使用自行百度。缺点:没办法自定义springboot的......