首页 Java java教程 Spring 中的异常:如何克服错误

Spring 中的异常:如何克服错误

Nov 03, 2024 am 09:41 AM

因此,您将 Spring 实现到您的项目中,然后,根据墨菲定律,出现了异常。但不要惊慌——Spring 具有强大的错误处理能力!让我们弄清楚如何使用这些功能。

已检查和未检查的异常:为什么一切都如此混乱?

Исключения в Spring: как приручить свои ошибки

Java将异常分为两种类型:受控异常和非受控异常。受检查的异常需要显式处理。想象一下两个人行横道,人们正在穿过它们。一个过境点由一名严格检查员把守,并挂着“严格控制”标志。这里每个人都会被检查,没有权限的就不允许通过。这种转换类似于检查异常:它们需要强制处理,否则程序将无法编译。

相反,第二个转换不受控制。人们自由快速地通过它,没有任何检查。这类似于未经检查的异常:此类异常不需要处理,并且即使没有错误检查,代码也可以运行。然而,如果出现错误,它会意外地出现——就在“道路”上。

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

登录后复制
登录后复制
登录后复制

@ExceptionHandler:当 bug 得到 VIP 处理时

@ExceptionHandler 是您自己的个人“保镖”,仅捕获和处理指定方法或类的异常。如果您想对某些错误给予 VIP 处理,请使用 @ExceptionHandler 注解该方法并享受。

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

登录后复制
登录后复制
登录后复制

现在,每当遇到 ResourceNotFoundException 时,您的处理程序都会悄悄地打印一条友好的消息,而不是用户看到可怕的错误堆栈。

@ControllerAdvice:何时向左和向右提供建议

如果@ExceptionHandler只适用于特定的类,那么@ControllerAdvice就是排队之王。该注释覆盖了所有控制器,因此 bug 不会再次被漏掉!

Исключения в Spring: как приручить свои ошибки

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

登录后复制
登录后复制

使用此代码,所有未捕获的错误都将被捕获并通过一条消息进行处理。这就像一个针对例外情况的“全包”设置 - 方便且安全。

@ResponseStatus:当你想让异常更具表现力时

有时标准 HTTP 状态并不能完全捕捉异常的本质。但使用@ResponseStatus,您可以强制异常更具表现力。

Исключения в Spring: как приручить свои ошибки

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGlobalException(Exception ex) {
        return new ResponseEntity<>("Oops, something went wrong!", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
登录后复制

现在,当抛出 ResourceNotFoundException 时,Spring 将自动返回 404 状态,而无需强制您手动执行。添加戏剧性的好方法,对吧?

@RestControllerAdvice:针对 REST 爱好者

@RestControllerAdvice 类似于 @ControllerAdvice,但专门用于 REST 控制器。也就是说,它是您创建 API 的最佳选择,因为它返回 JSON 而不是 HTML 页面。支持真正的 REST 粉丝!

Исключения в Spring: как приручить свои ошибки

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

登录后复制
登录后复制
登录后复制

这种方法可确保您的用户始终收到 JSON 格式的结构化响应,使您的 API 更加用户友好。

自定义例外:当标准例外不够时

Исключения в Spring: как приручить свои ошибки

在某些时候,您意识到标准 Exception 和 RuntimeException 根本无法表达您所处情况的全部悲剧。好吧,创建你自己的例外!自定义异常增添了一点个性,Spring 仍然尊重地处理它们。

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

登录后复制
登录后复制

为其创建一个处理程序,应用程序的用户将看到一条清晰的消息,而不是一堆可怕的行。

结论
Spring 中的错误处理是一门艺术。从方法级处理到全局处理,从 JSON 响应到自定义状态,可能性确实是巨大的。

所以抓住@ExceptionHandler、@ControllerAdvice和@ResponseStatus,并将异常变成错误管理中的大师类。 Spring 已准备好帮助您处理任何错误并在用户面前挽​​回面子

以上是Spring 中的异常:如何克服错误的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte 2025年的前4个JavaScript框架:React,Angular,Vue,Svelte Mar 07, 2025 pm 06:09 PM

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存? 如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存? Mar 17, 2025 pm 05:44 PM

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?

Node.js 20:关键性能提升和新功能 Node.js 20:关键性能提升和新功能 Mar 07, 2025 pm 06:12 PM

Node.js 20:关键性能提升和新功能

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型? Java的类负载机制如何起作用,包括不同的类载荷及其委托模型? Mar 17, 2025 pm 05:35 PM

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?

冰山:数据湖桌的未来 冰山:数据湖桌的未来 Mar 07, 2025 pm 06:31 PM

冰山:数据湖桌的未来

Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复 Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复 Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射? 如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射? Mar 17, 2025 pm 05:43 PM

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案? 如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案? Mar 17, 2025 pm 05:46 PM

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?

See all articles