首页  >  文章  >  Java  >  Spring 中的异常:如何克服错误

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

DDD
DDD原创
2024-11-03 09:41:30185浏览

因此,您将 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