实现异常处理 - 404 资源未找到

2025年1月20日 | 阅读时长 2 分钟

在上一节中,当创建资源时,我们返回了正确的 CREATED 响应状态。在本节中,我们将讨论当用户资源不存在时应该返回什么响应。

让我们尝试执行一个简单的响应。

步骤 1: 打开 Rest 客户端 Postman 并选择 Get 方法。

步骤 2: 点击 History 选项卡,然后选择 Get 请求。

步骤 3: 输入 URI https://:8080/users/{id}。该用户 ID 应该不存在。

步骤 4: 点击 Send 按钮。

Implementing Exception Handling- 404 Resource Not Found

我们得到了 Status: 200 OK空 body,即使资源不存在,这也是一个成功的响应。但是,当资源不存在时,这不是正确的响应。

让我们先修复它。

步骤 1: 打开 UserResource.java 文件。

步骤 2: 创建一个 UserNotFoundException。这是一个 checked 异常。

步骤 3: 创建 UserNotFoundException 类。

步骤 4: 从父类生成构造函数。

右键单击文件 -> Source -> Generate Constructors from Superclass... -> 选中 RuntimeException(String) -> Generate。

Implementing Exception Handling- 404 Resource Not Found

UserNotFoundException.java

步骤 5: 打开 Rest 客户端 Postman 并生成一个 Get 响应,就像我们之前做的那样。它显示了 Status: 500 Internal Server Error

Implementing Exception Handling- 404 Resource Not Found

但是,Status: 500 Internal Server Error 不是资源未找到的适当响应。因此,我们将添加一个注解 @ResponseStatus 来生成 Status: 404 Not Found。

UserNotFoundException.java

步骤 6: 再次转到 Postman 并生成一个 Get 请求。

Implementing Exception Handling- 404 Resource Not Found

当用户资源不存在时,我们得到了正确的响应 Status: 404 Not Found。请求的主体由默认错误处理提供,这就是为什么我们得到这个返回状态的原因。

Implementing Exception Handling- 404 Resource Not Found

Spring Boot 和 Spring Web MVC 框架的组合提供了错误处理。Spring Boot 自动配置了一些默认的异常处理。重要的是要有一个一致的异常消息,该消息适用于我们企业内的所有服务。

如果我们有一个大型组织,并且每个服务以不同的方式返回异常消息,那么这不好。如果我们定义一个标准异常结构,该结构被所有 RESTful 服务遵循,那将是很好的。