Spring boot教程-实现异常处理 - 404 资源未找到
在前面的章节中,当我们创建资源时,我们返回了 CREATED 状态的适当响应。在本节中,我们将讨论当用户资源不存在时应该返回的响应。
让我们尝试并执行一个简单的响应。
步骤 1: 打开 REST 客户端 Postman 并选择 Get 方法。
步骤 2: 点击 History 标签并选择 Get 请求。
步骤 3: 在 URI 中键入 http://localhost:8080/users/{id}
。用户 ID 不应该存在。
步骤 4: 点击 Send 按钮。
我们得到了 Status: 200 OK 和 空的响应体,这是一个成功的响应,尽管资源不存在。但是这不是资源不存在时的正确响应。
首先让我们来修复这个问题。
步骤 1: 打开 UserResource.java 文件。
步骤 2: 创建一个 UserNotFoundException 异常。这是一个受检异常。
@GetMapping("/users/{id}")
public User retriveUser(@PathVariable int id)
{
User user= service.findOne(id);
if(user==null)
//runtime exception
throw new UserNotFoundException("id: "+ id);
return user;
}
步骤 3: 创建 UserNotFoundException 类。
步骤 4: 从超类生成构造函数。
右键单击文件 -> Source -> Generate Constructors from Superclass... -> 选中 RuntimeException(String) -> 生成。
UserNotFoundException.java:
package com.javatpoint.server.main.user;
public class UserNotFoundException extends RuntimeException
{
public UserNotFoundException(String message)
{
super(message);
}
}
步骤 5: 打开 REST 客户端 Postman 并生成一个和之前一样的 Get 响应。它会显示 Status: 500 Internal Server Error。
但是 Status: 500 Internal Server Error 不是资源未找到的适当响应。所以,我们将添加一个 @ResponseStatus 注解来生成 Status: 404 Not Found。
UserNotFoundException.java:
package com.javatpoint.server.main.user;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(HttpStatus.NOT_FOUND)
public class UserNotFoundException extends RuntimeException
{
public UserNotFoundException(String message)
{
super(message);
}
}
步骤 6: 再次切换到 Postman 并生成一个 Get 请求。
我们得到了适当的响应 Status: 404 Not Found,当用户资源不存在时。默认错误处理提供了请求的响应体,所以我们得到了这个返回状态。
Spring Boot 和 Spring Web MVC 框架的组合提供了错误处理。Spring Boot 自动配置了一些默认的异常处理。在企业中,拥有一致的异常消息对于所有服务都是重要的。
如果我们拥有一个大的组织,每个服务返回的异常消息都以不同的方式,这是不好的。如果我们定义一个所有 RESTful 服务都遵循的标准异常结构,那将是很好的。