码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 在Spring Boot中如何实现异常处理?


    在Spring Boot中,异常处理可以通过几种方式实现,以提高应用程序的健壮性和用户体验。这些方法包括使用@ControllerAdvice注解、@ExceptionHandler注解、实现ErrorController接口等。下面是一些实现Spring Boot异常处理的常用方法:

    1. 使用@ControllerAdvice和@ExceptionHandler

    @ControllerAdvice是一个用于全局异常处理的注解,它允许你在整个应用程序中处理异常,而不需要在每个@Controller中重复相同的异常处理代码。@ExceptionHandler用于定义具体的异常处理方法。

    1. @ControllerAdvice
    2. public class GlobalExceptionHandler {
    3. @ExceptionHandler(value = Exception.class)
    4. public ResponseEntity handleGeneralException(Exception ex, WebRequest request) {
    5. Map body = new LinkedHashMap<>();
    6. body.put("timestamp", LocalDateTime.now());
    7. body.put("message", "An error occurred");
    8. return new ResponseEntity<>(body, HttpStatus.INTERNAL_SERVER_ERROR);
    9. }
    10. @ExceptionHandler(value = CustomException.class)
    11. public ResponseEntity handleCustomException(CustomException ex, WebRequest request) {
    12. Map body = new LinkedHashMap<>();
    13. body.put("timestamp", LocalDateTime.now());
    14. body.put("message", ex.getMessage());
    15. return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
    16. }
    17. }
    18. 2. 实现ErrorController接口

      如果你想自定义/error路径下的错误页面或响应,可以通过实现Spring Boot的ErrorController接口来实现。

      1. @Controller
      2. public class CustomErrorController implements ErrorController {
      3. @RequestMapping("/error")
      4. public String handleError(HttpServletRequest request) {
      5. // 可以获取错误状态码和做其他逻辑处理
      6. Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
      7. if (status != null) {
      8. int statusCode = Integer.parseInt(status.toString());
      9. // 根据状态码返回不同的视图名或模型
      10. }
      11. return "errorPage"; // 返回错误页面的视图名
      12. }
      13. @Override
      14. public String getErrorPath() {
      15. return "/error";
      16. }
      17. }

      3. ResponseEntityExceptionHandler扩展

      通过扩展ResponseEntityExceptionHandler类,你可以覆盖其中的方法来自定义处理特定的异常。这个类提供了一系列方法来处理Spring MVC抛出的常见异常。

      1. @ControllerAdvice
      2. public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
      3. @Override
      4. protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
      5. HttpHeaders headers, HttpStatus status, WebRequest request) {
      6. Map body = new LinkedHashMap<>();
      7. body.put("timestamp", LocalDateTime.now());
      8. body.put("status", status.value());
      9. List errors = ex.getBindingResult()
      10. .getFieldErrors()
      11. .stream()
      12. .map(x -> x.getDefaultMessage())
      13. .collect(Collectors.toList());
      14. body.put("errors", errors);
      15. return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
      16. }
      17. // 其他异常处理...
      18. }
      19. 通过这些方法,Spring Boot允许开发者灵活地处理应用程序中的异常,无论是全局处理还是特定异常的定制化处理,都能以优雅和统一的方式进行。

      20. 相关阅读:
        智源社区AI周刊No.108:Meta发布玩外交游戏的Cicero,登Science;Neuralink实现猴子意念打字...
        linux网络初探
        关于地方美食的HTML网页设计——地方美食介绍网站 HTML顺德美食介绍 html网页制作代码大全
        富格林:谨防欺诈陷阱安全计策应对
        【深度优先搜索遍历算法的实现,广度优先遍历(BFS-Breadth_First Search),构造最小生成树】
        Sprint产品待办列表的优先级要怎么排?
        R语言ggplot2可视化:使用ggplot2可视化散点图、使用scale_color_viridis_d函数指定数据点的配色方案
        umi项目本地开发环境远程打开的问题
        Zookeeper基础
        【Vue项目】实现商品的升降序
      21. 原文地址:https://blog.csdn.net/www_tlj/article/details/136334407
        • 最新文章
        • 攻防演习之三天拿下官网站群
          数据安全治理学习——前期安全规划和安全管理体系建设
          企业安全 | 企业内一次钓鱼演练准备过程
          内网渗透测试 | Kerberos协议及其部分攻击手法
          0day的产生 | 不懂代码的"代码审计"
          安装scrcpy-client模块av模块异常,环境问题解决方案
          leetcode hot100【LeetCode 279. 完全平方数】java实现
          OpenWrt下安装Mosquitto
          AnatoMask论文汇总
          【AI日记】24.11.01 LangChain、openai api和github copilot
        • 热门文章
        • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
          奉劝各位学弟学妹们,该打造你的技术影响力了!
          五年了,我在 CSDN 的两个一百万。
          Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
          面试官都震惊,你这网络基础可以啊!
          你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
          心情不好的时候,用 Python 画棵樱花树送给自己吧
          通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
          13 万字 C 语言从入门到精通保姆级教程2021 年版
          10行代码集2000张美女图,Python爬虫120例,再上征途
        Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
        正则表达式工具 cron表达式工具 密码生成工具

        京公网安备 11010502049817号