Spring @ExceptionHandler注解统一异常处理和获取方法名

 更新时间:2023年09月25日 09:03:22   作者:楼兰胡杨  
这篇文章主要介绍了Spring注解之@ExceptionHandler 统一异常处理和获取方法名,在实际项目中,合理使用@ExceptionHandler能够提高代码的可维护性和用户体验,通过本文的解析和实践,读者可以更好地理解和掌握@ExceptionHandler的用法和原理

摘要:

在 Spring Boot 中,使用Spring注解@ControllerAdvice 和 @ExceptionHandler 统一处理异常,并捕获方法名,从而快速定位错误原因。

背景分析

  最近走查线上环境日志时,发现打印了很多org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported异常日志,虽然知道是因为接口不支持GET请求导致的,但是,定位不到是因为错误调用哪个接口导致,给人很大困惑。

@ExceptionHandler介绍

  异常处理器@ExceptionHandler是Spring MVC框架中用于处理异常的注解,方法名按需自定义,方法参数可以是Exception及其子类对象、HttpServletRequest、HttpServletResponse等,系统会自动为它们赋值。方法返回值类型可以为ModelAndView、Model、Map、View、String以及void等。它的作用是把各个Controller中抛出的异常集中到一个类中处理。

  在被@ControllerAdvice或者@RestControllerAdvice修饰的类里,可以使用@ExceptionHandler捕捉异常,返回值类型为Map的示例如下:

@Slf4j
@RestControllerAdvice
public class GlobalExceptionAdvice {
	/*
   * 捕捉HTTP请求方式异常HttpRequestMethodNotSupportedException
   */
   @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
   public Map<String, Object> handleBadMethodException(HttpRequestMethodNotSupportedException exception, HttpServletRequest req) {
       log.error("不支持的请求方式:{}-{}", req.getRequestURI(), exception.getMessage());
       Map<String, Object> result=new HashMap();
       result.put("msg","不支持的请求方式");
       result.put("code", HttpStatus.METHOD_NOT_ALLOWED.value());
       return result;
   }
}

  @RestControllerAdvice:放在类的上面,表示这个类中有异常处理器,它是基于AOP的、对控制器类的一个增强。

  req.getRequestURI()用于获取当前API访问路径的URI,里面包含方法名,用于快速定位是哪个API出错。

  在上述异常处理器示例中,当控制层抛出HttpRequestMethodNotSupportedException异常时,handleBadMethodException方法会被调用,返回一个包含错误信息的Map对象。如果把@ExceptionHandler(HttpRequestMethodNotSupportedException.class)改为@ExceptionHandler(Exception.class),则是处理全局异常了,会捕获所有未被其它方法处理的异常,这样处理的缺点是异常太过宽泛,不利于排查问题。

  验证功能的方法很简单,请使用GET请求访问仅支持POST请求的函数,此时,控制台将打印如下信息:

不支持的请求方式:/wiener/XXXMethod-Request method 'GET' not supported

结束语

  Spring MVC的@ExceptionHandler注解为Web应用程序提供了便捷的异常处理机制。通过使用该注解,可以在控制器中捕获和处理特定类型的异常,提供友好的错误信息给用户。在实际项目中,合理使用@ExceptionHandler能够提高代码的可维护性和用户体验。通过本文的解析和实践,读者可以更好地理解和掌握@ExceptionHandler的用法和原理。

到此这篇关于Spring注解之@ExceptionHandler 统一异常处理和获取方法名的文章就介绍到这了,更多相关Spring @ExceptionHandler 统一异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Intellij IDEA全局替换快捷键整理

    Intellij IDEA全局替换快捷键整理

    这篇文章主要给大家介绍了关于Intellij IDEA全局替换快捷键整理的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Springboot整合logback的详细教程

    Springboot整合logback的详细教程

    这篇文章主要介绍了Springboot整合logback的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • 使用idea远程调试jar包的配置过程

    使用idea远程调试jar包的配置过程

    这篇文章主要介绍了使用idea远程调试jar包的配置过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • SpringDataJpa写原生sql遇到的问题及解决

    SpringDataJpa写原生sql遇到的问题及解决

    这篇文章主要介绍了SpringDataJpa写原生sql遇到的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot深入理解之内置web容器及配置的总结

    SpringBoot深入理解之内置web容器及配置的总结

    今天小编就为大家分享一篇关于SpringBoot深入理解之内置web容器及配置的总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • java简单工厂模式实例及讲解

    java简单工厂模式实例及讲解

    这篇文章主要为大家详细介绍了java简单工厂模式实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 学生视角手把手带你写Java 线程池改良版

    学生视角手把手带你写Java 线程池改良版

    作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门
    2022-03-03
  • Java Socket编程实例(一)- TCP基本使用

    Java Socket编程实例(一)- TCP基本使用

    这篇文章主要讲解Java Socket编程中TCP的基本使用,希望能给大家做一个参考。
    2016-06-06
  • JavaEE通过response实现请求重定向

    JavaEE通过response实现请求重定向

    这篇文章主要介绍了JavaEE通过response实现请求重定向的方法,非常的简单实用,有需要的朋友可以参考下
    2014-10-10
  • Java中删除文件或文件夹的几种方法总结

    Java中删除文件或文件夹的几种方法总结

    这篇文章主要介绍了Java中删除文件或文件夹的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论